From 06a9c074ef88da505e7dfb792e6a130b41a76e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 23 Apr 2024 18:49:28 +0200 Subject: [PATCH 001/136] Update manifest.toml --- manifest.toml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index b847a94e..1b5ca0b1 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "28.0.4~ynh2" +version = "29.0.0~ynh1" maintainers = ["kay0u"] @@ -66,8 +66,12 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.4.tar.bz2' - sha256 = '9bfecee1e12fba48c49e9a71caa81c4ba10b2884787fab75d64ccfd122a13019' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.0.tar.bz2' + sha256 = 'e9b53f6432b6f664487d3869645fa121a64cf0ed6aee83aa560903daf86b52bd' + + [resources.sources.28] + url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' + sha256 = '4e8b0b74b40221e85f92ab869d0873c69a52d7e43889d9259c6259428a6a36f2' [resources.sources.27] url = 'https://download.nextcloud.com/server/releases/nextcloud-27.0.0.tar.bz2' From e5d224a0520eca0b76769f3e85727d128acc8268 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 23 Apr 2024 16:49:33 +0000 Subject: [PATCH 002/136] Auto-update READMEs --- README.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7a0a2676..7a9e3035 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 28.0.4~ynh2 +**Shipped version:** 29.0.0~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 06763946..1802216d 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 28.0.4~ynh2 +**Paketatutako bertsioa:** 29.0.0~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 91334c29..a6a50e40 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 28.0.4~ynh2 +**Version incluse :** 29.0.0~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index e0c30707..dd5d8404 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 28.0.4~ynh2 +**Versión proporcionada:** 29.0.0~ynh1 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index be0c5919..5161b308 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 28.0.4~ynh2 +**分发版本:** 29.0.0~ynh1 **演示:** From 3503f0e279c5d4f2820a96a4f1c6011cd058e3df Mon Sep 17 00:00:00 2001 From: OniriCorpe Date: Fri, 26 Apr 2024 22:27:11 +0200 Subject: [PATCH 003/136] add pre upgrade warning for NC 29 --- doc/PRE_UPGRADE.d/29.0.0~ynh1.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/PRE_UPGRADE.d/29.0.0~ynh1.md diff --git a/doc/PRE_UPGRADE.d/29.0.0~ynh1.md b/doc/PRE_UPGRADE.d/29.0.0~ynh1.md new file mode 100644 index 00000000..75e3ae66 --- /dev/null +++ b/doc/PRE_UPGRADE.d/29.0.0~ynh1.md @@ -0,0 +1,5 @@ +If you are upgrading to a new major version of Nextcloud, please make sure that your Nextcloud apps are up to date from Nextcloud's administration panel beforehand. + +Additionally, if you installed specific Nextcloud apps, we recommend making sure that they are compatible with the new major version. +YunoHost will attempt to check this automatically at the very beginning of the upgrade, but a manual check doesn't hurt either. +For Nextcloud 29, this forum thread might be helpful : . From 6d0c2ce24f180b98c2da8d89c18aab19b142a124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 22 May 2024 23:03:20 +0200 Subject: [PATCH 004/136] update to PHP8.3 --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 1b5ca0b1..bb9bfd73 100644 --- a/manifest.toml +++ b/manifest.toml @@ -116,7 +116,7 @@ ram.runtime = "512M" api.allowed = ["visitors", "all_users"] [resources.apt] - packages = "mariadb-server, imagemagick, libmagickcore-6.q16-6-extra, acl, tar, smbclient, at, php8.2-fpm, php8.2-bz2, php8.2-imap, php8.2-gmp, php8.2-gd, php8.2-intl, php8.2-curl, php8.2-apcu, php8.2-redis, php8.2-ldap, php8.2-imagick, php8.2-zip, php8.2-mbstring, php8.2-xml, php8.2-mysql, php8.2-igbinary, php8.2-bcmath" + packages = "mariadb-server, imagemagick, libmagickcore-6.q16-6-extra, acl, tar, smbclient, at, php8.3-fpm, php8.3-bz2, php8.3-imap, php8.3-gmp, php8.3-gd, php8.3-intl, php8.3-curl, php8.3-apcu, php8.3-redis, php8.3-ldap, php8.3-imagick, php8.3-zip, php8.3-mbstring, php8.3-xml, php8.3-mysql, php8.3-igbinary, php8.3-bcmath" [resources.database] type = "mysql" From 2b1d579974cf563883317715451d4ecfceceea32 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Wed, 22 May 2024 21:03:25 +0000 Subject: [PATCH 005/136] Auto-update READMEs --- ALL_README.md | 1 + README_es.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++ README_zh_Hans.md | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 README_es.md diff --git a/ALL_README.md b/ALL_README.md index a01b345b..152f2e74 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -1,6 +1,7 @@ # All available README files by language - [Read the README in English](README.md) +- [Lea el README en español](README_es.md) - [Irakurri README euskaraz](README_eu.md) - [Lire le README en français](README_fr.md) - [Le o README en galego](README_gl.md) diff --git a/README_es.md b/README_es.md new file mode 100644 index 00000000..5d0f6b06 --- /dev/null +++ b/README_es.md @@ -0,0 +1,61 @@ + + +# Nextcloud para Yunohost + +[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) + +[![Instalar Nextcloud con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Leer este README en otros idiomas.](./ALL_README.md)* + +> *Este paquete le permite instalarNextcloud rapidamente y simplement en un servidor YunoHost.* +> *Si no tiene YunoHost, visita [the guide](https://yunohost.org/install) para aprender como instalarla.* + +## Descripción general + +Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. + +### YunoHost-specific features + +In addition to Nextcloud core features, the following are made available with this package: + + * Integrate with YunoHost users and SSO - i.e. logout button + * Allow one user to be the administrator (set at the installation) + * Allow multiple instances of this application + * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) + * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal + + +**Versión actual:** 29.0.0~ynh1 + +**Demo:** + +## Capturas + +![Captura de Nextcloud](./doc/screenshots/screenshot.png) + +## Documentaciones y recursos + +- Sitio web oficial: +- Documentación usuario oficial: +- Documentación administrador oficial: +- Repositorio del código fuente oficial de la aplicación : +- Catálogo YunoHost: +- Reportar un error: + +## Información para desarrolladores + +Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing + +Para probar la rama `testing`, sigue asÍ: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +o +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Mas informaciones sobre el empaquetado de aplicaciones:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 5161b308..915e5c34 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -3,7 +3,7 @@ 请勿手动编辑。 --> -# YunoHost 的 Nextcloud +# YunoHost 上的 Nextcloud [![集成程度](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![工作状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) From cc263ecfeec1eeade2368aa1015bdfc214c5d9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 23 May 2024 18:07:20 +0200 Subject: [PATCH 006/136] Update manifest.toml --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index bb9bfd73..4494372a 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.0~ynh1" +version = "29.0.1~ynh1" maintainers = ["kay0u"] @@ -66,8 +66,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.0.tar.bz2' - sha256 = 'e9b53f6432b6f664487d3869645fa121a64cf0ed6aee83aa560903daf86b52bd' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.1.tar.bz2' + sha256 = '759546daecf79ca787ed6705503693c6db553aabf1d7ae4dfa779c7309b2ada9' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' From 0d05a771e7b5f186aaeab552d2812136a4c40ea9 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 23 May 2024 16:07:27 +0000 Subject: [PATCH 007/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7a9e3035..b4ac0414 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 29.0.0~ynh1 +**Shipped version:** 29.0.1~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 5d0f6b06..0af9c6b0 100644 --- a/README_es.md +++ b/README_es.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión actual:** 29.0.0~ynh1 +**Versión actual:** 29.0.1~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 1802216d..6b5a084a 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 29.0.0~ynh1 +**Paketatutako bertsioa:** 29.0.1~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index a6a50e40..5c8079f3 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 29.0.0~ynh1 +**Version incluse :** 29.0.1~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index dd5d8404..0f794134 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 29.0.0~ynh1 +**Versión proporcionada:** 29.0.1~ynh1 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 915e5c34..adc61aa0 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 29.0.0~ynh1 +**分发版本:** 29.0.1~ynh1 **演示:** From 1b66d7f23a22785515780983973a00a6b10a4e06 Mon Sep 17 00:00:00 2001 From: lyyn <79758863+lyynd@users.noreply.github.com> Date: Sat, 1 Jun 2024 19:47:09 +0200 Subject: [PATCH 008/136] Fix space splitting in phpflags on install (#690) --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 9be9341f..88c1c0da 100755 --- a/scripts/install +++ b/scripts/install @@ -6,7 +6,7 @@ source _ynh_mysql_connect_as.sh phpflags="--define apc.enable_cli=1" -ynh_app_setting_set --app=$app --key=phpflags --value=$phpflags +ynh_app_setting_set --app=$app --key=phpflags --value="$phpflags" #================================================= # CREATE A MYSQL DATABASE From f6a8dc83e58477a275839b5e3f85a8e9178cb62d Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 1 Jun 2024 17:49:30 +0000 Subject: [PATCH 009/136] Auto-update READMEs --- README_fr.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README_fr.md b/README_fr.md index 2a7d3e48..5c8079f3 100644 --- a/README_fr.md +++ b/README_fr.md @@ -28,6 +28,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Accès optionnel au répertoire home depuis les fichiers Nextcloud (à activer à l'installation, le partage étant activé par défaut) * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal + **Version incluse :** 29.0.1~ynh1 **Démo :** From 652d6de292901f18ac4a3744247702c814d0054e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 2 Jun 2024 09:37:46 +0200 Subject: [PATCH 010/136] Update upgrade --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 9d11edf5..5dd1497f 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,7 +16,7 @@ ynh_app_setting_delete --app=$app --key=backup_core_only # If phpflags doesn't exist, create it if [ -z "${phpflags:-}" ]; then phpflags="--define apc.enable_cli=1" - ynh_app_setting_set --app=$app --key=phpflags --value=$phpflags + ynh_app_setting_set --app=$app --key=phpflags --value="$phpflags" fi if ynh_compare_current_package_version --comparison lt --version 22.2~ynh1 From 253357a7dd0b70796ad829a70c434c6f521979e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:25:01 +0200 Subject: [PATCH 011/136] Update manifest.toml --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 4494372a..0c899523 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.1~ynh1" +version = "29.0.2~ynh1" maintainers = ["kay0u"] @@ -66,8 +66,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.1.tar.bz2' - sha256 = '759546daecf79ca787ed6705503693c6db553aabf1d7ae4dfa779c7309b2ada9' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.2.tar.bz2' + sha256 = '2d49d297dc340092021057823e8e78a312bc00f56de7d8677ac790590918ab17' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' From cc45b8eba271367f0a283f192ceb5c632423194b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 6 Jun 2024 13:25:07 +0000 Subject: [PATCH 012/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b4ac0414..b892592b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 29.0.1~ynh1 +**Shipped version:** 29.0.2~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 0af9c6b0..3ed8bc10 100644 --- a/README_es.md +++ b/README_es.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión actual:** 29.0.1~ynh1 +**Versión actual:** 29.0.2~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 6b5a084a..e1df5a33 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 29.0.1~ynh1 +**Paketatutako bertsioa:** 29.0.2~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 5c8079f3..0bb2d4d5 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 29.0.1~ynh1 +**Version incluse :** 29.0.2~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 0f794134..bbd9686b 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 29.0.1~ynh1 +**Versión proporcionada:** 29.0.2~ynh1 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index adc61aa0..d97e0ed5 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 29.0.1~ynh1 +**分发版本:** 29.0.2~ynh1 **演示:** From 38c2ecc3659f55165fef781f96bf0c00a28fa1be Mon Sep 17 00:00:00 2001 From: tituspijean Date: Sat, 8 Jun 2024 08:01:04 +0200 Subject: [PATCH 013/136] Fix phpflags (#691) --- scripts/upgrade | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 5dd1497f..7dd9a828 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -13,11 +13,8 @@ ynh_script_progression --message="Ensuring downward compatibility..." # Remove the option backup_core_only if it's in the settings.yml file ynh_app_setting_delete --app=$app --key=backup_core_only -# If phpflags doesn't exist, create it -if [ -z "${phpflags:-}" ]; then - phpflags="--define apc.enable_cli=1" - ynh_app_setting_set --app=$app --key=phpflags --value="$phpflags" -fi +phpflags="--define apc.enable_cli=1" +ynh_app_setting_set --app=$app --key=phpflags --value="$phpflags" if ynh_compare_current_package_version --comparison lt --version 22.2~ynh1 then From 1ab6c01c984736b13a4eb0e4bffa898caf474320 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:15:15 +0200 Subject: [PATCH 014/136] Fix upgrade: php version is 8.3 starting from 29.x ? (#692) --- scripts/upgrade | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 7dd9a828..418770ff 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -39,7 +39,10 @@ filter_boring_occ_warnings() { # Define a function to execute commands with `occ` exec_occ() { # Backward compatibility to upgrade from older versions - if [ $current_major_version = "last" ] || [ $current_major_version -ge 26 ] + if [ $current_major_version = "last" ] + then + NEXTCLOUD_PHP_VERSION="8.3" + elif [ $current_major_version -ge 26 ] then NEXTCLOUD_PHP_VERSION="8.2" elif [ $current_major_version -ge 24 ] From ef6d230ffec3b2c1abcc9b80cbed7d4ca38f921c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:16:36 +0200 Subject: [PATCH 015/136] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 0c899523..0e38f3f2 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.2~ynh1" +version = "29.0.2~ynh2" maintainers = ["kay0u"] From 6aa78213260e8e306f19c3c880b90daac1127612 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 20 Jun 2024 17:16:48 +0000 Subject: [PATCH 016/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b892592b..468c8397 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 29.0.2~ynh1 +**Shipped version:** 29.0.2~ynh2 **Demo:** diff --git a/README_es.md b/README_es.md index 3ed8bc10..b90a3d8c 100644 --- a/README_es.md +++ b/README_es.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión actual:** 29.0.2~ynh1 +**Versión actual:** 29.0.2~ynh2 **Demo:** diff --git a/README_eu.md b/README_eu.md index e1df5a33..40b4c1ab 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 29.0.2~ynh1 +**Paketatutako bertsioa:** 29.0.2~ynh2 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 0bb2d4d5..80de7d92 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 29.0.2~ynh1 +**Version incluse :** 29.0.2~ynh2 **Démo :** diff --git a/README_gl.md b/README_gl.md index bbd9686b..387f9882 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 29.0.2~ynh1 +**Versión proporcionada:** 29.0.2~ynh2 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index d97e0ed5..3a6e3984 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 29.0.2~ynh1 +**分发版本:** 29.0.2~ynh2 **演示:** From 6870be098bc604e12886afe8fbf1746de767ae48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:17:52 +0200 Subject: [PATCH 017/136] Update tests.toml --- tests.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests.toml b/tests.toml index 0e8e459a..eb4b3634 100644 --- a/tests.toml +++ b/tests.toml @@ -9,4 +9,4 @@ test_format = 1.0 test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" - \ No newline at end of file + test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" From 89899fd7092dd1612c6626402d57c0104c3029d2 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sun, 23 Jun 2024 02:54:07 +0200 Subject: [PATCH 018/136] [autopatch] Do not delete logs on app removal (#697) --- scripts/remove | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/remove b/scripts/remove index f8d582fe..e1c98c62 100755 --- a/scripts/remove +++ b/scripts/remove @@ -16,8 +16,6 @@ ynh_remove_nginx_config # Remove the dedicated PHP-FPM config ynh_remove_fpm_config -# remove logs -ynh_secure_remove --file="/var/log/$app" # Remove the app-specific logrotate config ynh_remove_logrotate From 2f0cfe5ebbca69d3cc204088abd13fad4568d470 Mon Sep 17 00:00:00 2001 From: YunoHost Bot Date: Sun, 23 Jun 2024 09:00:08 +0200 Subject: [PATCH 019/136] [autopatch] Do not delete logs on app removal (#698) Co-authored-by: Yunohost-Bot <> From d848e736a1dc94f46d4afc3f6af6fbe22a7e8bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:36:30 +0200 Subject: [PATCH 020/136] 29.0.3 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 0e38f3f2..ef01371e 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.2~ynh2" +version = "29.0.3~ynh1" maintainers = ["kay0u"] @@ -66,8 +66,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.2.tar.bz2' - sha256 = '2d49d297dc340092021057823e8e78a312bc00f56de7d8677ac790590918ab17' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.3.tar.bz2' + sha256 = 'a5996e764c120927f8844d8f5b28c736b8e2f3280b120be13a2bd7731cdb7fd4' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' From e584e31721dd0a756bb584917cd47ecb8e94f7d6 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 25 Jun 2024 13:36:41 +0000 Subject: [PATCH 021/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 468c8397..3c548fd3 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 29.0.2~ynh2 +**Shipped version:** 29.0.3~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index b90a3d8c..594c0cb8 100644 --- a/README_es.md +++ b/README_es.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión actual:** 29.0.2~ynh2 +**Versión actual:** 29.0.3~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 40b4c1ab..a72230bb 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 29.0.2~ynh2 +**Paketatutako bertsioa:** 29.0.3~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 80de7d92..814c1d7f 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 29.0.2~ynh2 +**Version incluse :** 29.0.3~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 387f9882..9abd0978 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 29.0.2~ynh2 +**Versión proporcionada:** 29.0.3~ynh1 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 3a6e3984..a9c8d4f9 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 29.0.2~ynh2 +**分发版本:** 29.0.3~ynh1 **演示:** From 26bfa59cb45ad6dadb4ac6583b33a19926ca7dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:36:46 +0200 Subject: [PATCH 022/136] Update remove --- scripts/remove | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index e1c98c62..c39ac68c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -16,7 +16,6 @@ ynh_remove_nginx_config # Remove the dedicated PHP-FPM config ynh_remove_fpm_config - # Remove the app-specific logrotate config ynh_remove_logrotate From 88fbb734c86f45f62c1a0c9371418036d4ead738 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 27 Jun 2024 11:33:57 +0200 Subject: [PATCH 023/136] Indent --- scripts/upgrade | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 418770ff..8252a9b3 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -71,13 +71,13 @@ exec_occ() { # Define a function to add an external storage # Create the external storage for the given folders and enable sharing create_external_storage() { -local mount_dir="$1" -local mount_name="$2" -local mount_id=$(exec_occ files_external:create --output=json \ - "$mount_name" 'local' 'null::null' -c "datadir=$mount_dir" || true) -! [[ $mount_id =~ ^[0-9]+$ ]] \ - && ynh_print_warn --message="Unable to create external storage" \ - || exec_occ files_external:option "$mount_id" enable_sharing true + local mount_dir="$1" + local mount_name="$2" + local mount_id=$(exec_occ files_external:create --output=json \ + "$mount_name" 'local' 'null::null' -c "datadir=$mount_dir" || true) + ! [[ $mount_id =~ ^[0-9]+$ ]] \ + && ynh_print_warn --message="Unable to create external storage" \ + || exec_occ files_external:option "$mount_id" enable_sharing true } function list_installed_apps_not_compatible_with_future_version() From f7c21e467e32c5e51bcf07c8663ecaf5edc9d699 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 27 Jun 2024 11:35:00 +0200 Subject: [PATCH 024/136] Fix again upgrade ending with Nextcloud being in PHP 8.2 ? --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 8252a9b3..c2ddc1d9 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -39,7 +39,7 @@ filter_boring_occ_warnings() { # Define a function to execute commands with `occ` exec_occ() { # Backward compatibility to upgrade from older versions - if [ $current_major_version = "last" ] + if [ $current_major_version = "$last_major_version" ] then NEXTCLOUD_PHP_VERSION="8.3" elif [ $current_major_version -ge 26 ] From b96736ad64d08aac524667b677d912d36b74886d Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 27 Jun 2024 09:35:08 +0000 Subject: [PATCH 025/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3c548fd3..da9c32c3 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ It shall NOT be edited by hand. # Nextcloud for YunoHost -[![Integration level](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Working status](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integration level](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Working status](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![Install Nextcloud with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_es.md b/README_es.md index 594c0cb8..af9d2629 100644 --- a/README_es.md +++ b/README_es.md @@ -5,7 +5,7 @@ No se debe editar a mano. # Nextcloud para Yunohost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![Instalar Nextcloud con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_eu.md b/README_eu.md index a72230bb..0be7b88e 100644 --- a/README_eu.md +++ b/README_eu.md @@ -5,7 +5,7 @@ EZ editatu eskuz. # Nextcloud YunoHost-erako -[![Integrazio maila](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integrazio maila](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![Instalatu Nextcloud YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_fr.md b/README_fr.md index 814c1d7f..cf2fbfb2 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,7 +5,7 @@ Il NE doit PAS être modifié à la main. # Nextcloud pour YunoHost -[![Niveau d’intégration](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Niveau d’intégration](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![Installer Nextcloud avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_gl.md b/README_gl.md index 9abd0978..6e3bf79b 100644 --- a/README_gl.md +++ b/README_gl.md @@ -5,7 +5,7 @@ NON debe editarse manualmente. # Nextcloud para YunoHost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![Instalar Nextcloud con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_zh_Hans.md b/README_zh_Hans.md index a9c8d4f9..1f71c2b3 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -5,7 +5,7 @@ # YunoHost 上的 Nextcloud -[![集成程度](https://dash.yunohost.org/integration/nextcloud.svg)](https://dash.yunohost.org/appci/app/nextcloud) ![工作状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![集成程度](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![工作状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) [![使用 YunoHost 安装 Nextcloud](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) From 42ae252c078eb3798c34cd0d20482ce7e4b59221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 1 Jul 2024 15:05:46 +0200 Subject: [PATCH 026/136] Update nginx.conf --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 0300bad6..5a4f22a3 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -102,7 +102,7 @@ location ^~ __PATH__/ { # `/nextcloud/index.php` to the URI, resulting in a HTTP 500 error response. location ~ \.php(?:$|/) { # Required for legacy support - rewrite ^__PATH__/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy|.+\/richdocumentscode_arm64\/proxy) __PATH__/index.php$request_uri; + rewrite ^__PATH__/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) __PATH__/index.php$request_uri; fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; From 9fcb43a0bf94b3bb7aa740984330589102cd9e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:49:44 +0200 Subject: [PATCH 027/136] Update manifest.toml --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index ef01371e..4cf5e999 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.3~ynh1" +version = "29.0.4~ynh1" maintainers = ["kay0u"] @@ -66,8 +66,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.3.tar.bz2' - sha256 = 'a5996e764c120927f8844d8f5b28c736b8e2f3280b120be13a2bd7731cdb7fd4' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.4.tar.bz2' + sha256 = '19c469e264b31ee80400f8396460854546569e88db4c15fc0854e192f96027eb' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' From 49e88d894995d3096367581a39f64fd3a5eafc1e Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 18 Jul 2024 12:49:49 +0000 Subject: [PATCH 028/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_zh_Hans.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index da9c32c3..b9dea00a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Shipped version:** 29.0.3~ynh1 +**Shipped version:** 29.0.4~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index af9d2629..b8685717 100644 --- a/README_es.md +++ b/README_es.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión actual:** 29.0.3~ynh1 +**Versión actual:** 29.0.4~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 0be7b88e..5a1609e8 100644 --- a/README_eu.md +++ b/README_eu.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Paketatutako bertsioa:** 29.0.3~ynh1 +**Paketatutako bertsioa:** 29.0.4~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index cf2fbfb2..0b9ec937 100644 --- a/README_fr.md +++ b/README_fr.md @@ -29,7 +29,7 @@ En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suiv * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal -**Version incluse :** 29.0.3~ynh1 +**Version incluse :** 29.0.4~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 6e3bf79b..939c2a41 100644 --- a/README_gl.md +++ b/README_gl.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**Versión proporcionada:** 29.0.3~ynh1 +**Versión proporcionada:** 29.0.4~ynh1 **Demo:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 1f71c2b3..eb9b198f 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -29,7 +29,7 @@ In addition to Nextcloud core features, the following are made available with th * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal -**分发版本:** 29.0.3~ynh1 +**分发版本:** 29.0.4~ynh1 **演示:** From 70e9e721f227fef70ae015c6a8db0938888d36b7 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Thu, 18 Jul 2024 17:29:39 +0200 Subject: [PATCH 029/136] Rework DESCRIPTION.md (#707) * Update DESCRIPTION_fr.md * Auto-update READMEs * Update DESCRIPTION.md * Auto-update READMEs * Update DESCRIPTION_fr.md * Auto-update READMEs --------- Co-authored-by: yunohost-bot --- README.md | 12 +++--------- README_es.md | 12 +++--------- README_eu.md | 12 +++--------- README_fr.md | 12 +++--------- README_gl.md | 12 +++--------- README_zh_Hans.md | 12 +++--------- doc/DESCRIPTION.md | 12 +++--------- doc/DESCRIPTION_fr.md | 12 +++--------- 8 files changed, 24 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index b9dea00a..81eb8a69 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,11 @@ It shall NOT be edited by hand. ## Overview -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. **Shipped version:** 29.0.4~ynh1 diff --git a/README_es.md b/README_es.md index b8685717..9b75f1c2 100644 --- a/README_es.md +++ b/README_es.md @@ -16,17 +16,11 @@ No se debe editar a mano. ## Descripción general -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. **Versión actual:** 29.0.4~ynh1 diff --git a/README_eu.md b/README_eu.md index 5a1609e8..8b722e45 100644 --- a/README_eu.md +++ b/README_eu.md @@ -16,17 +16,11 @@ EZ editatu eskuz. ## Aurreikuspena -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. **Paketatutako bertsioa:** 29.0.4~ynh1 diff --git a/README_fr.md b/README_fr.md index 0b9ec937..f59d5831 100644 --- a/README_fr.md +++ b/README_fr.md @@ -16,17 +16,11 @@ Il NE doit PAS être modifié à la main. ## Vue d’ensemble -Nextcloud Hub est la plate-forme de collaboration de contenu sur site entièrement open source. Les équipes accèdent, partagent et modifient leurs documents, discutent et participent à des appels vidéo et gèrent leur courrier, leur calendrier et leurs projets sur des interfaces mobiles, de bureau et Web. +Nextcloud permet de rendre accessible et de synchroniser ses données, fichiers, contacts, agendas entre différents appareils (ordinateurs ou mobiles), ou de les partager avec d'autres personnes (avec ou sans comptes), et propose également des fonctionnalités avancées de communication et de travail collaboratif. Nextcloud dispose de son propre mécanisme d'applications (voir aussi [le store d'apps de Nextcloud](https://apps.nextcloud.com/)) pour disposer des fonctionnalités spécifiques. -### Caractéristiques spécifiques YunoHost +Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). -En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suivantes sont incluses dans ce package : - - * Intégration avec les utilisateurs YunoHost et le SSO - exemple, le bouton de déconnexion - * Permet à un utilisateur d'être l'administrateur (choisi à l'installation) - * Permet de multiples instances de cette application - * Accès optionnel au répertoire home depuis les fichiers Nextcloud (à activer à l'installation, le partage étant activé par défaut) - * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal +L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. **Version incluse :** 29.0.4~ynh1 diff --git a/README_gl.md b/README_gl.md index 939c2a41..9a823a38 100644 --- a/README_gl.md +++ b/README_gl.md @@ -16,17 +16,11 @@ NON debe editarse manualmente. ## Vista xeral -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. **Versión proporcionada:** 29.0.4~ynh1 diff --git a/README_zh_Hans.md b/README_zh_Hans.md index eb9b198f..465182e3 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -16,17 +16,11 @@ ## 概况 -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. **分发版本:** 29.0.4~ynh1 diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 3d35dc46..67150c8f 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,11 +1,5 @@ -Nextcloud Hub is a fully open-source on-premises content collaboration platform. Teams access, share and edit their documents, chat and participate in video calls and manage their mail and calendar and projects across mobile, desktop and web interfaces. +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -### YunoHost-specific features +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). -In addition to Nextcloud core features, the following are made available with this package: - - * Integrate with YunoHost users and SSO - i.e. logout button - * Allow one user to be the administrator (set at the installation) - * Allow multiple instances of this application - * Optionally access the user home folder from Nextcloud files (set at the installation, the sharing is enabled by default) - * Serve `/.well-known` paths for CalDAV and CardDAV on the domain only if it's not already served - i.e. by Baïkal +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index 6131f487..b9229dc0 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1,11 +1,5 @@ -Nextcloud Hub est la plate-forme de collaboration de contenu sur site entièrement open source. Les équipes accèdent, partagent et modifient leurs documents, discutent et participent à des appels vidéo et gèrent leur courrier, leur calendrier et leurs projets sur des interfaces mobiles, de bureau et Web. +Nextcloud permet de rendre accessible et de synchroniser ses données, fichiers, contacts, agendas entre différents appareils (ordinateurs ou mobiles), ou de les partager avec d'autres personnes (avec ou sans comptes), et propose également des fonctionnalités avancées de communication et de travail collaboratif. Nextcloud dispose de son propre mécanisme d'applications (voir aussi [le store d'apps de Nextcloud](https://apps.nextcloud.com/)) pour disposer des fonctionnalités spécifiques. -### Caractéristiques spécifiques YunoHost +Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). -En plus des fonctionnalités principales de Nextcloud, les fonctionnalités suivantes sont incluses dans ce package : - - * Intégration avec les utilisateurs YunoHost et le SSO - exemple, le bouton de déconnexion - * Permet à un utilisateur d'être l'administrateur (choisi à l'installation) - * Permet de multiples instances de cette application - * Accès optionnel au répertoire home depuis les fichiers Nextcloud (à activer à l'installation, le partage étant activé par défaut) - * Utilise l'adresse `/.well-known` pour la synchronisation CalDAV et CardDAV du domaine si aucun autre service ne l'utilise déjà - par exemple, Baïkal +L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. From c0a58b2190ed028859aa5c403344c58844e2f166 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 25 Jul 2024 11:40:48 +0200 Subject: [PATCH 030/136] bump all old versions --- manifest.toml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/manifest.toml b/manifest.toml index 4cf5e999..ebffdec5 100644 --- a/manifest.toml +++ b/manifest.toml @@ -70,32 +70,33 @@ ram.runtime = "512M" sha256 = '19c469e264b31ee80400f8396460854546569e88db4c15fc0854e192f96027eb' [resources.sources.28] - url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.0.tar.bz2' - sha256 = '4e8b0b74b40221e85f92ab869d0873c69a52d7e43889d9259c6259428a6a36f2' + url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' + sha256 = '55a2f745fcc8f01b5816b23333f1e3014d2040a66794e132ddd0d219a37be53a' + prefetch = false [resources.sources.27] - url = 'https://download.nextcloud.com/server/releases/nextcloud-27.0.0.tar.bz2' - sha256 = '3d312a09b9345ac058758dd7b4059bf3cf0b1f0f1d747251b6fac3585ba6533f' + url = 'https://download.nextcloud.com/server/releases/nextcloud-27.1.11.tar.bz2' + sha256 = '4edd2570f4c83442f8f0f0616fb774ed2663b11cf9f6ea49e795ab43aeef9645' prefetch = false [resources.sources.26] - url = 'https://download.nextcloud.com/server/releases/nextcloud-26.0.0.tar.bz2' - sha256 = 'f163150363aee9366ecb5cd5259bf6756ed4f073cea78b5fa515cada7a0d0c3d' + url = 'https://download.nextcloud.com/server/releases/nextcloud-26.0.13.tar.bz2' + sha256 = '0a362df7a1233348f99d1853fd7e79f0667b552c145dc45012fab54ac31c79ae' prefetch = false [resources.sources.25] - url = 'https://download.nextcloud.com/server/releases/nextcloud-25.0.0.tar.bz2' - sha256 = '2c05ac9d7b72b44ef8b3d2ae03ff0fd6121e254b8054556f5163bd8760dd8f49' + url = https://download.nextcloud.com/server/releases/nextcloud-25.0.13.tar.bz2' + sha256 = '387bac148a696244f1ec02698a082d408283a875b3de85eb9719dd4493eebe33' prefetch = false [resources.sources.24] - url = 'https://download.nextcloud.com/server/releases/nextcloud-24.0.0.tar.bz2' - sha256 = '176cb5620f20465fb4759bdf3caaebeb7acff39d6c8630351af9f8738c173780' + url = 'https://download.nextcloud.com/server/releases/nextcloud-24.0.12.tar.bz2' + sha256 = '2f093bdf7d34faf38d22f38a5e11f3aee32746ff4add3df17c790b9b36390836' prefetch = false [resources.sources.23] - url = 'https://download.nextcloud.com/server/releases/nextcloud-23.0.0.tar.bz2' - sha256 = 'c37592abc3b65c8fd28459281a24f414b87af52fc8c2ea979be3f9be75d01a2c' + url = 'https://download.nextcloud.com/server/releases/nextcloud-23.0.12.tar.bz2' + sha256 = 'ad3637fd987e9f1ed5bd5dbd177bdce1e39228e3daf95bc4a3c590d4b1522b1e' prefetch = false [resources.system_user] From 9d4487836c19ed1acef55afa9c75356a0d4a7e86 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 25 Jul 2024 11:47:32 +0200 Subject: [PATCH 031/136] oupsie --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index ebffdec5..7f0c9ca2 100644 --- a/manifest.toml +++ b/manifest.toml @@ -85,7 +85,7 @@ ram.runtime = "512M" prefetch = false [resources.sources.25] - url = https://download.nextcloud.com/server/releases/nextcloud-25.0.13.tar.bz2' + url = 'https://download.nextcloud.com/server/releases/nextcloud-25.0.13.tar.bz2' sha256 = '387bac148a696244f1ec02698a082d408283a875b3de85eb9719dd4493eebe33' prefetch = false From 9bb5bee9db9d8a349d7ab41d29ad0e4555a57789 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 25 Jul 2024 09:47:36 +0000 Subject: [PATCH 032/136] Auto-update READMEs --- ALL_README.md | 1 + README_id.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 README_id.md diff --git a/ALL_README.md b/ALL_README.md index 152f2e74..4ed64dd4 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -5,4 +5,5 @@ - [Irakurri README euskaraz](README_eu.md) - [Lire le README en français](README_fr.md) - [Le o README en galego](README_gl.md) +- [Baca README dalam bahasa bahasa Indonesia](README_id.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README_id.md b/README_id.md new file mode 100644 index 00000000..281ffba1 --- /dev/null +++ b/README_id.md @@ -0,0 +1,55 @@ + + +# Nextcloud untuk YunoHost + +[![Tingkat integrasi](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Status kerja](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Status pemeliharaan](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) + +[![Pasang Nextcloud dengan YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Baca README ini dengan bahasa yang lain.](./ALL_README.md)* + +> *Paket ini memperbolehkan Anda untuk memasang Nextcloud secara cepat dan mudah pada server YunoHost.* +> *Bila Anda tidak mempunyai YunoHost, silakan berkonsultasi dengan [panduan](https://yunohost.org/install) untuk mempelajari bagaimana untuk memasangnya.* + +## Ringkasan + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + + +**Versi terkirim:** 29.0.4~ynh1 + +**Demo:** + +## Tangkapan Layar + +![Tangkapan Layar pada Nextcloud](./doc/screenshots/screenshot.png) + +## Dokumentasi dan sumber daya + +- Website aplikasi resmi: +- Dokumentasi pengguna resmi: +- Dokumentasi admin resmi: +- Repositori kode aplikasi hulu: +- Gudang YunoHost: +- Laporkan bug: + +## Info developer + +Silakan kirim pull request ke [`testing` branch](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Untuk mencoba branch `testing`, silakan dilanjutkan seperti: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +atau +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Info lebih lanjut mengenai pemaketan aplikasi:** From 1cb2448d3bab7d0d476c7f5d673daf07b44b749c Mon Sep 17 00:00:00 2001 From: Kayou Date: Mon, 29 Jul 2024 10:12:38 +0200 Subject: [PATCH 033/136] system_addressbook_exposed is a boolean --- manifest.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 7f0c9ca2..d727ead0 100644 --- a/manifest.toml +++ b/manifest.toml @@ -57,9 +57,8 @@ ram.runtime = "512M" [install.system_addressbook_exposed] ask.en = "Should there be a system address book listing all users, accessible by all users?" ask.fr = "Devrait-il y avoir un carnet d'adresses système listant tous les comptes, accessible par tous les comptes ?" - type = "select" - choices = ["yes", "no"] - default = "yes" + type = "boolean" + default = true [resources] From 0c4ab487e8d854783502def7c19d0a2ecec9eb6b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 29 Jul 2024 08:12:41 +0000 Subject: [PATCH 034/136] Auto-update READMEs --- README_id.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_id.md b/README_id.md index 281ffba1..71cbfaaf 100644 --- a/README_id.md +++ b/README_id.md @@ -36,7 +36,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD - Website aplikasi resmi: - Dokumentasi pengguna resmi: - Dokumentasi admin resmi: -- Repositori kode aplikasi hulu: +- Depot kode aplikasi hulu: - Gudang YunoHost: - Laporkan bug: From 7f40b5a17b6c990550a03bcd25a023704d9395c8 Mon Sep 17 00:00:00 2001 From: Kayou Date: Mon, 29 Jul 2024 11:22:01 +0200 Subject: [PATCH 035/136] migrate system_addressbook_exposed to boolean, fix upgrade test --- scripts/upgrade | 9 +++++++++ tests.toml | 1 + 2 files changed, 10 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index c2ddc1d9..1441abbc 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -10,6 +10,15 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= ynh_script_progression --message="Ensuring downward compatibility..." +# Fix system_addressbook_exposed as a boolean +if [ "${system_addressbook_exposed,,}" = "yes" ]; then + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=1 + system_addressbook_exposed=1 +elif [ "${system_addressbook_exposed,,}" = "no" ]; then + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 + system_addressbook_exposed=0 +fi + # Remove the option backup_core_only if it's in the settings.yml file ynh_app_setting_delete --app=$app --key=backup_core_only diff --git a/tests.toml b/tests.toml index eb4b3634..cdd5e776 100644 --- a/tests.toml +++ b/tests.toml @@ -10,3 +10,4 @@ test_format = 1.0 test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" From 4fa1f991eb780f31c522fc5f83875194fcdf27f8 Mon Sep 17 00:00:00 2001 From: Kayou Date: Mon, 29 Jul 2024 13:20:37 +0200 Subject: [PATCH 036/136] another fix for system_addressbook_exposed, update the dav conf accordingly --- scripts/upgrade | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index 1441abbc..4db95980 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -10,6 +10,11 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= ynh_script_progression --message="Ensuring downward compatibility..." +if [ -z ${system_addressbook_exposed:-} ]; then + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 + system_addressbook_exposed=0 +fi + # Fix system_addressbook_exposed as a boolean if [ "${system_addressbook_exposed,,}" = "yes" ]; then ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=1 @@ -288,6 +293,12 @@ then #================================================= exec_occ config:system:set overwrite.cli.url --value="https://${domain}${path}" + + #================================================= + # ENABLE OR DISABLE SYSTEM ADDRESS BOOK + #================================================= + + exec_occ config:app:set dav system_addressbook_exposed --value="$system_addressbook_exposed" #================================================= # MOUNT HOME FOLDERS AS EXTERNAL STORAGE From ae916549cac44773ce448764a64e7310592491aa Mon Sep 17 00:00:00 2001 From: Kayou Date: Mon, 29 Jul 2024 15:39:44 +0200 Subject: [PATCH 037/136] zblerg, do not modify system_addressbook_exposed config value in the upgrade script --- scripts/upgrade | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 4db95980..e36d62e1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -11,17 +11,17 @@ upgrade_type=$(ynh_check_app_version_changed) ynh_script_progression --message="Ensuring downward compatibility..." if [ -z ${system_addressbook_exposed:-} ]; then - ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 system_addressbook_exposed=0 fi # Fix system_addressbook_exposed as a boolean if [ "${system_addressbook_exposed,,}" = "yes" ]; then - ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=1 - system_addressbook_exposed=1 + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=1 + system_addressbook_exposed=1 elif [ "${system_addressbook_exposed,,}" = "no" ]; then - ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 - system_addressbook_exposed=0 + ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 + system_addressbook_exposed=0 fi # Remove the option backup_core_only if it's in the settings.yml file @@ -293,12 +293,6 @@ then #================================================= exec_occ config:system:set overwrite.cli.url --value="https://${domain}${path}" - - #================================================= - # ENABLE OR DISABLE SYSTEM ADDRESS BOOK - #================================================= - - exec_occ config:app:set dav system_addressbook_exposed --value="$system_addressbook_exposed" #================================================= # MOUNT HOME FOLDERS AS EXTERNAL STORAGE From 4b9224fd9b35ad44b316a69538f8cecb8fd7a14f Mon Sep 17 00:00:00 2001 From: Kayou Date: Tue, 30 Jul 2024 12:09:00 +0200 Subject: [PATCH 038/136] add redis-server as deps --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index d727ead0..7b855d6e 100644 --- a/manifest.toml +++ b/manifest.toml @@ -116,7 +116,7 @@ ram.runtime = "512M" api.allowed = ["visitors", "all_users"] [resources.apt] - packages = "mariadb-server, imagemagick, libmagickcore-6.q16-6-extra, acl, tar, smbclient, at, php8.3-fpm, php8.3-bz2, php8.3-imap, php8.3-gmp, php8.3-gd, php8.3-intl, php8.3-curl, php8.3-apcu, php8.3-redis, php8.3-ldap, php8.3-imagick, php8.3-zip, php8.3-mbstring, php8.3-xml, php8.3-mysql, php8.3-igbinary, php8.3-bcmath" + packages = "mariadb-server, imagemagick, libmagickcore-6.q16-6-extra, acl, tar, smbclient, at, redis-server, php8.3-fpm, php8.3-bz2, php8.3-imap, php8.3-gmp, php8.3-gd, php8.3-intl, php8.3-curl, php8.3-apcu, php8.3-redis, php8.3-ldap, php8.3-imagick, php8.3-zip, php8.3-mbstring, php8.3-xml, php8.3-mysql, php8.3-igbinary, php8.3-bcmath" [resources.database] type = "mysql" From e215d9c5c9889d8c69a056c67ad8997a5dd69646 Mon Sep 17 00:00:00 2001 From: Kayou Date: Tue, 30 Jul 2024 16:52:31 +0200 Subject: [PATCH 039/136] find files before chown them --- scripts/install | 7 ++++--- scripts/restore | 4 ++-- scripts/upgrade | 10 ++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/scripts/install b/scripts/install index 88c1c0da..0e303198 100755 --- a/scripts/install +++ b/scripts/install @@ -64,7 +64,8 @@ exec_occ() { } # Set write access for the following commands -chown -R $app: "$install_dir" "$data_dir" +find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ # Define password in an intermediate var # The fact that it's called _password allows it to be @@ -234,8 +235,8 @@ ynh_multimedia_addaccess $app #================================================= # Fix app ownerships & permissions -chown -R $app:www-data "$install_dir" -chown -R $app: "$data_dir" +find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/restore b/scripts/restore index 1b0f63cd..da7848e9 100755 --- a/scripts/restore +++ b/scripts/restore @@ -79,8 +79,8 @@ ynh_restore_file --origin_path="$data_dir" --not_mandatory #================================================= # Fix app ownerships & permissions -chown -R $app:www-data "$install_dir" -chown -R $app: "$data_dir" +find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/upgrade b/scripts/upgrade index e36d62e1..5d704467 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -138,7 +138,8 @@ then ynh_script_progression --message="Upgrading $app..." --weight=3 # Set write access for the following commands - chown -R $app: "$install_dir" "$data_dir" + find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ + find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ # Print the current version number of Nextcloud exec_occ -V @@ -207,7 +208,8 @@ then mv "$tmpdir" "$install_dir" # Set write access for the following commands - chown -R $app: "$install_dir" "$data_dir" + find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ + find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off @@ -324,8 +326,8 @@ fi ynh_script_progression --message="Reapplying file permissions..." --weight=2 # Fix app ownerships & permissions -chown -R $app:www-data "$install_dir" -chown -R $app: "$data_dir" +find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 From 5dc5e8ba10f5eab37f8ae085ae4a56f3b9a44d2d Mon Sep 17 00:00:00 2001 From: Kayou Date: Tue, 30 Jul 2024 18:30:19 +0200 Subject: [PATCH 040/136] chown the root folder too --- scripts/install | 4 ++++ scripts/restore | 2 ++ scripts/upgrade | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/scripts/install b/scripts/install index 0e303198..9b705b54 100755 --- a/scripts/install +++ b/scripts/install @@ -65,7 +65,9 @@ exec_occ() { # Set write access for the following commands find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ +chown $app: "$data_dir" # Define password in an intermediate var # The fact that it's called _password allows it to be @@ -236,7 +238,9 @@ ynh_multimedia_addaccess $app # Fix app ownerships & permissions find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ +chown $app: "$data_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/restore b/scripts/restore index da7848e9..5ef4f919 100755 --- a/scripts/restore +++ b/scripts/restore @@ -80,7 +80,9 @@ ynh_restore_file --origin_path="$data_dir" --not_mandatory # Fix app ownerships & permissions find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ +chown $app: "$data_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/upgrade b/scripts/upgrade index 5d704467..76d424bd 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -139,7 +139,9 @@ then # Set write access for the following commands find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ + chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ + chown $app: "$data_dir" # Print the current version number of Nextcloud exec_occ -V @@ -209,7 +211,9 @@ then # Set write access for the following commands find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ + chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ + chown $app: "$data_dir" # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off @@ -327,7 +331,9 @@ ynh_script_progression --message="Reapplying file permissions..." --weight=2 # Fix app ownerships & permissions find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ +chown $app:www-data "$install_dir" find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ +chown $app: "$data_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 From 8d682cbdbcbd1579a9c901f71429dd7354449ae8 Mon Sep 17 00:00:00 2001 From: Kayou Date: Wed, 31 Jul 2024 11:56:49 +0200 Subject: [PATCH 041/136] fix find condition --- scripts/install | 12 ++++-------- scripts/restore | 6 ++---- scripts/upgrade | 18 ++++++------------ 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/scripts/install b/scripts/install index 9b705b54..d8ef9c07 100755 --- a/scripts/install +++ b/scripts/install @@ -64,10 +64,8 @@ exec_occ() { } # Set write access for the following commands -find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ -chown $app:www-data "$install_dir" -find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ -chown $app: "$data_dir" +find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ # Define password in an intermediate var # The fact that it's called _password allows it to be @@ -237,10 +235,8 @@ ynh_multimedia_addaccess $app #================================================= # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ -chown $app:www-data "$install_dir" -find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ -chown $app: "$data_dir" +find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/restore b/scripts/restore index 5ef4f919..6ef7833f 100755 --- a/scripts/restore +++ b/scripts/restore @@ -79,10 +79,8 @@ ynh_restore_file --origin_path="$data_dir" --not_mandatory #================================================= # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ -chown $app:www-data "$install_dir" -find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ -chown $app: "$data_dir" +find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/upgrade b/scripts/upgrade index 76d424bd..48a88891 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -138,10 +138,8 @@ then ynh_script_progression --message="Upgrading $app..." --weight=3 # Set write access for the following commands - find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ - chown $app:www-data "$install_dir" - find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ - chown $app: "$data_dir" + find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ + find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ # Print the current version number of Nextcloud exec_occ -V @@ -210,10 +208,8 @@ then mv "$tmpdir" "$install_dir" # Set write access for the following commands - find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ - chown $app:www-data "$install_dir" - find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ - chown $app: "$data_dir" + find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ + find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off @@ -330,10 +326,8 @@ fi ynh_script_progression --message="Reapplying file permissions..." --weight=2 # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -or -group www-data \) -exec chown $app:www-data {} \+ -chown $app:www-data "$install_dir" -find "$data_dir" -not \( -user $app -or -group $app \) -exec chown $app: {} \+ -chown $app: "$data_dir" +find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ +find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 From 706d5071c6f4e04af2050546b563400a4e2649f4 Mon Sep 17 00:00:00 2001 From: Kayou Date: Wed, 31 Jul 2024 14:59:55 +0200 Subject: [PATCH 042/136] find ... chmod is not faster, at least avoid to chown -R the data_dir in the upgrade script --- scripts/install | 8 ++++---- scripts/restore | 4 ++-- scripts/upgrade | 9 +++------ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/scripts/install b/scripts/install index d8ef9c07..2f7b40aa 100755 --- a/scripts/install +++ b/scripts/install @@ -64,8 +64,8 @@ exec_occ() { } # Set write access for the following commands -find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ -find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ +chown -R $app:www-data "$install_dir" +chown -R $app: "$data_dir" # Define password in an intermediate var # The fact that it's called _password allows it to be @@ -235,8 +235,8 @@ ynh_multimedia_addaccess $app #================================================= # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ -find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ +chown -R $app:www-data "$install_dir" +chown -R $app: "$data_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/restore b/scripts/restore index 6ef7833f..1b0f63cd 100755 --- a/scripts/restore +++ b/scripts/restore @@ -79,8 +79,8 @@ ynh_restore_file --origin_path="$data_dir" --not_mandatory #================================================= # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ -find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ +chown -R $app:www-data "$install_dir" +chown -R $app: "$data_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 diff --git a/scripts/upgrade b/scripts/upgrade index 48a88891..9fb31573 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -138,8 +138,7 @@ then ynh_script_progression --message="Upgrading $app..." --weight=3 # Set write access for the following commands - find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ - find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ + chown -R $app:www-data "$install_dir" # Print the current version number of Nextcloud exec_occ -V @@ -208,8 +207,7 @@ then mv "$tmpdir" "$install_dir" # Set write access for the following commands - find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ - find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ + chown -R $app:www-data "$install_dir" # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off @@ -326,8 +324,7 @@ fi ynh_script_progression --message="Reapplying file permissions..." --weight=2 # Fix app ownerships & permissions -find "$install_dir" -not \( -user $app -and -group www-data \) -exec chown $app:www-data {} \+ -find "$data_dir" -not \( -user $app -and -group $app \) -exec chown $app: {} \+ +chown -R $app:www-data "$install_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 From d240d552b47d717fd23154e5cd1eb236b5c29126 Mon Sep 17 00:00:00 2001 From: Kayou Date: Wed, 31 Jul 2024 15:11:08 +0200 Subject: [PATCH 043/136] add a button in the config panel to run chown/chmod on data_dir --- config_panel.toml | 11 ++++++++--- scripts/config | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 4e458b6b..e5e88aed 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -3,14 +3,19 @@ version = "1.0" [main] name = "Nextcloud configuration" - [main.maintenance_mode] - name = "Maintenance mode" + [main.maintenance] + name = "Maintenance" - [main.maintenance_mode.maintenance_mode] + [main.maintenance.maintenance_mode] ask = "Enable maintenance mode" type = "boolean" default = "0" + [main.maintenance.set_permissions_button] + ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" + type = "button" + style = "success" + [main.addressbook] name = "Address book configuration" diff --git a/scripts/config b/scripts/config index 93ced20f..e2310095 100644 --- a/scripts/config +++ b/scripts/config @@ -105,6 +105,24 @@ set__fpm_free_footprint() { fi } +#================================================= +# SPECIFIC RUNNERS FOR TOML SHORT KEYS +#================================================= + +function run__set_permissions_button() { + local data_dir=$(ynh_app_setting_get --app=$app --key=data_dir) + ynh_print_info "Set permissions, it may take some time..." + chown -R $app:www-data "$install_dir" + chown -R $app: "$data_dir" + find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 + find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 + find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 + find $data_dir/data/ -type d -print0 | xargs -r0 chmod 0750 + chmod 640 "$install_dir/config/config.php" + chmod 755 /home/yunohost.app + chmod 750 $install_dir +} + #================================================= # GENERIC FINALIZATION #================================================= From 30b2d8123a13d315c803486d9abee3607cc2162f Mon Sep 17 00:00:00 2001 From: Kayou Date: Wed, 31 Jul 2024 15:13:04 +0200 Subject: [PATCH 044/136] we can avoid this chmod too i guess? --- scripts/upgrade | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 9fb31573..2a021507 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -327,8 +327,6 @@ ynh_script_progression --message="Reapplying file permissions..." --weight=2 chown -R $app:www-data "$install_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 -find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 -find $data_dir/data/ -type d -print0 | xargs -r0 chmod 0750 chmod 640 "$install_dir/config/config.php" chmod 755 /home/yunohost.app chmod 750 $install_dir From 55b5c7900fc0330c0a75252f464c1eade24f7ef2 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 00:16:45 +0200 Subject: [PATCH 045/136] only nextcloud is allowed to read the config file --- scripts/install | 3 ++- scripts/restore | 2 +- scripts/upgrade | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/install b/scripts/install index 2f7b40aa..f2635e76 100755 --- a/scripts/install +++ b/scripts/install @@ -65,6 +65,7 @@ exec_occ() { # Set write access for the following commands chown -R $app:www-data "$install_dir" +chmod 600 "$install_dir/config/config.php" chown -R $app: "$data_dir" # Define password in an intermediate var @@ -241,7 +242,7 @@ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 find $data_dir/data/ -type d -print0 | xargs -r0 chmod 0750 -chmod 640 "$install_dir/config/config.php" +chmod 600 "$install_dir/config/config.php" chmod 755 /home/yunohost.app chmod 750 $install_dir diff --git a/scripts/restore b/scripts/restore index 1b0f63cd..9ae36115 100755 --- a/scripts/restore +++ b/scripts/restore @@ -85,7 +85,7 @@ find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 find $data_dir/data/ -type f -print0 | xargs -r0 chmod 0640 find $data_dir/data/ -type d -print0 | xargs -r0 chmod 0750 -chmod 640 "$install_dir/config/config.php" +chmod 600 "$install_dir/config/config.php" chmod 755 /home/yunohost.app chmod 750 $install_dir diff --git a/scripts/upgrade b/scripts/upgrade index 2a021507..846c1d9c 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -139,6 +139,7 @@ then # Set write access for the following commands chown -R $app:www-data "$install_dir" + chmod 600 "$install_dir/config/config.php" # Print the current version number of Nextcloud exec_occ -V @@ -208,6 +209,7 @@ then # Set write access for the following commands chown -R $app:www-data "$install_dir" + chmod 600 "$install_dir/config/config.php" # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off @@ -327,7 +329,7 @@ ynh_script_progression --message="Reapplying file permissions..." --weight=2 chown -R $app:www-data "$install_dir" find $install_dir/ -type f -print0 | xargs -r0 chmod 0644 find $install_dir/ -type d -print0 | xargs -r0 chmod 0755 -chmod 640 "$install_dir/config/config.php" +chmod 600 "$install_dir/config/config.php" chmod 755 /home/yunohost.app chmod 750 $install_dir From 07f90a85f6e24d66dc4b863011b71484ab11ce2f Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 09:30:49 +0200 Subject: [PATCH 046/136] zblerg, the config file doesn't exist before install --- scripts/install | 1 - scripts/upgrade | 2 -- 2 files changed, 3 deletions(-) diff --git a/scripts/install b/scripts/install index f2635e76..0987b848 100755 --- a/scripts/install +++ b/scripts/install @@ -65,7 +65,6 @@ exec_occ() { # Set write access for the following commands chown -R $app:www-data "$install_dir" -chmod 600 "$install_dir/config/config.php" chown -R $app: "$data_dir" # Define password in an intermediate var diff --git a/scripts/upgrade b/scripts/upgrade index 846c1d9c..074385b0 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -139,7 +139,6 @@ then # Set write access for the following commands chown -R $app:www-data "$install_dir" - chmod 600 "$install_dir/config/config.php" # Print the current version number of Nextcloud exec_occ -V @@ -209,7 +208,6 @@ then # Set write access for the following commands chown -R $app:www-data "$install_dir" - chmod 600 "$install_dir/config/config.php" # Upgrade Nextcloud (SUCCESS = 0, UP_TO_DATE = 3) exec_occ maintenance:mode --off From 5556fb6549d8602ba0ccd8455f2c081065f6692d Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 11:44:40 +0200 Subject: [PATCH 047/136] wait until nginx has actually remove the nextcloud conf during upgrade before checking the url_handled --- scripts/upgrade | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/upgrade b/scripts/upgrade index e36d62e1..aa391c02 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -357,6 +357,15 @@ ynh_app_setting_delete --app=$app --key="checksum__etc_nginx_conf.d_$domain.d_$a # Wait untils NGINX has fully reloaded ynh_systemd_action --service_name=nginx --action=reload --line_match="Reloaded" --log_path="systemd" +# Nginx may take some time to support the new configuration, wait for the nextcloud configuration file to disappear from nginx before checking the CalDAV/CardDAV URL. +timeout=30 +for i in $(seq 1 $timeout); do + if ! ynh_exec_warn_less nginx -T | grep --quiet "# configuration file /etc/nginx/conf.d/$domain.d/$app.conf:"; then + break + fi + sleep 1 +done + # Check if .well-known is available for this domain if is_url_handled --domain="$domain" --path="/.well-known/caldav" || is_url_handled --domain="$domain" --path="/.well-known/carddav" then From d7f9b2c9fd77fac51d1d7dad0f6d0ff6572d2e71 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 11:53:16 +0200 Subject: [PATCH 048/136] create a function for that --- scripts/_common.sh | 13 +++++++++++++ scripts/upgrade | 9 +-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 65cce784..f060a27d 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -8,6 +8,19 @@ # EXPERIMENTAL HELPERS #================================================= +wait_nginx_reload() { + # Nginx may take some time to support the new configuration, + # wait for the nextcloud configuration file to disappear from nginx before checking the CalDAV/CardDAV URL. + timeout=30 + for i in $(seq 1 $timeout); do + if ! ynh_exec_warn_less nginx -T | grep --quiet "# configuration file /etc/nginx/conf.d/$domain.d/$app.conf:"; then + break + fi + sleep 1 +done +} + + # Check if an URL is already handled # usage: is_url_handled --domain=DOMAIN --path=PATH_URI is_url_handled() { diff --git a/scripts/upgrade b/scripts/upgrade index aa391c02..ad0e4c63 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -357,14 +357,7 @@ ynh_app_setting_delete --app=$app --key="checksum__etc_nginx_conf.d_$domain.d_$a # Wait untils NGINX has fully reloaded ynh_systemd_action --service_name=nginx --action=reload --line_match="Reloaded" --log_path="systemd" -# Nginx may take some time to support the new configuration, wait for the nextcloud configuration file to disappear from nginx before checking the CalDAV/CardDAV URL. -timeout=30 -for i in $(seq 1 $timeout); do - if ! ynh_exec_warn_less nginx -T | grep --quiet "# configuration file /etc/nginx/conf.d/$domain.d/$app.conf:"; then - break - fi - sleep 1 -done +wait_nginx_reload # Check if .well-known is available for this domain if is_url_handled --domain="$domain" --path="/.well-known/caldav" || is_url_handled --domain="$domain" --path="/.well-known/carddav" From 49ec72b6ef87e7a803ecf21793b275249ccd77e5 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 11:53:29 +0200 Subject: [PATCH 049/136] fix change-url dav detection --- scripts/change_url | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index aac12f0f..f43ed113 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -14,6 +14,16 @@ source /usr/share/yunohost/helpers #================================================= ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2 +# Check if .well-known is available for this domain +if is_url_handled --domain="$new_domain" --path="/.well-known/caldav" || is_url_handled --domain="$new_domain" --path="/.well-known/carddav" +then + ynh_print_warn --message="Another app already uses the domain $new_domain to serve a CalDAV/CardDAV feature. You may encounter issues when dealing with your calendar or address book." + + # Remove lines about .well-known/carddav and caldav with sed. + sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "/etc/nginx/conf.d/$domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" +fi + ynh_change_url_nginx_config #================================================= @@ -37,16 +47,6 @@ then # Reload php fpm, necessary for force nextcloud to re-read config.php, cf opcache.revalidate_freq ynh_systemd_action --service_name=php${phpversion}-fpm --action=reload - - # Check if .well-known is available for this domain - if is_url_handled --domain="$new_domain" --path="/.well-known/caldav" || is_url_handled --domain="$new_domain" --path="/.well-known/carddav" - then - ynh_print_warn --message="Another app already uses the domain $new_domain to serve a CalDAV/CardDAV feature. You may encounter issues when dealing with your calendar or address book." - - # Remove lines about .well-known/carddav and caldav with sed. - sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "/etc/nginx/conf.d/$new_domain.d/$app.conf" - ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" - fi fi #================================================= From 73a3498b93011ea6dd897fa409944740a8f466fa Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 11:54:17 +0200 Subject: [PATCH 050/136] only if domain has changed... --- scripts/change_url | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index f43ed113..8cadcea2 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -14,14 +14,17 @@ source /usr/share/yunohost/helpers #================================================= ynh_script_progression --message="Updating NGINX web server configuration..." --weight=2 -# Check if .well-known is available for this domain -if is_url_handled --domain="$new_domain" --path="/.well-known/caldav" || is_url_handled --domain="$new_domain" --path="/.well-known/carddav" +if [ $change_domain -eq 1 ] then - ynh_print_warn --message="Another app already uses the domain $new_domain to serve a CalDAV/CardDAV feature. You may encounter issues when dealing with your calendar or address book." + # Check if .well-known is available for this domain + if is_url_handled --domain="$new_domain" --path="/.well-known/caldav" || is_url_handled --domain="$new_domain" --path="/.well-known/carddav" + then + ynh_print_warn --message="Another app already uses the domain $new_domain to serve a CalDAV/CardDAV feature. You may encounter issues when dealing with your calendar or address book." - # Remove lines about .well-known/carddav and caldav with sed. - sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "/etc/nginx/conf.d/$domain.d/$app.conf" - ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" + # Remove lines about .well-known/carddav and caldav with sed. + sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "/etc/nginx/conf.d/$domain.d/$app.conf" + ynh_store_file_checksum --file="/etc/nginx/conf.d/$domain.d/$app.conf" + fi fi ynh_change_url_nginx_config From fa5da4fe666feee04e0988590e98a2944dc0188d Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 14:07:39 +0200 Subject: [PATCH 051/136] Update scripts/_common.sh --- scripts/_common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index f060a27d..653a0b05 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -17,7 +17,7 @@ wait_nginx_reload() { break fi sleep 1 -done + done } From 4df511adf58a94d348495eb5b4e4751342dea5e0 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 14:39:05 +0200 Subject: [PATCH 052/136] select the version you wish to track in Yunohost --- manifest.toml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/manifest.toml b/manifest.toml index 7b855d6e..14e4dd95 100644 --- a/manifest.toml +++ b/manifest.toml @@ -60,6 +60,12 @@ ram.runtime = "512M" type = "boolean" default = true + [install.version_to_follow] + ask.en = "Which version do you want" + type = "select" + choices = ["stable", "oldstable"] + default = "stable" + [resources] [resources.sources] From cfb346dce799dd5f78da0cda4b8ae1ed3b5e0134 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 14:51:04 +0200 Subject: [PATCH 053/136] install: select between latest or oldstable version --- scripts/install | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 0987b848..b36fb315 100755 --- a/scripts/install +++ b/scripts/install @@ -23,8 +23,15 @@ ynh_script_progression --message="Setting up source files..." --weight=5 # Enable YunoHost patches on Nextcloud sources cp -a ../sources/patches_last_version/* ../sources/patches + +source_id="main" +if [ "$version_to_follow" == "oldstable" ]; then + last_version=$(ynh_read_manifest --manifest_key="resources.sources.main.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') + last_major_version=${last_version%%.*} + source_id=$((last_major_version--)) +fi # Download, check integrity, uncompress and patch the source from app.src -ynh_setup_source --dest_dir="$install_dir" +ynh_setup_source --dest_dir="$install_dir" --source_id="$source_id" #================================================= # PHP-FPM CONFIGURATION From 8a7f99d35470d7a6d0aec08ed56e6a0a6ade504e Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 17:29:04 +0200 Subject: [PATCH 054/136] moar sleep --- scripts/_common.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 653a0b05..512b33a2 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -19,7 +19,8 @@ wait_nginx_reload() { sleep 1 done } - +# Wait untils nginx has fully reloaded (avoid curl fail with http2) +sleep 2 # Check if an URL is already handled # usage: is_url_handled --domain=DOMAIN --path=PATH_URI From 5e498ded58e927892af5a56cfbf48b2563023f76 Mon Sep 17 00:00:00 2001 From: Kayou Date: Thu, 1 Aug 2024 17:29:50 +0200 Subject: [PATCH 055/136] oups --- scripts/_common.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 512b33a2..19c1859d 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -18,9 +18,9 @@ wait_nginx_reload() { fi sleep 1 done + # Wait untils nginx has fully reloaded (avoid curl fail with http2) + sleep 2 } -# Wait untils nginx has fully reloaded (avoid curl fail with http2) -sleep 2 # Check if an URL is already handled # usage: is_url_handled --domain=DOMAIN --path=PATH_URI From e83c680c54f667f669079405c22c1559245a5489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 3 Aug 2024 09:49:44 +0200 Subject: [PATCH 056/136] minor typos --- scripts/_common.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 19c1859d..4cdc0189 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -9,8 +9,8 @@ #================================================= wait_nginx_reload() { - # Nginx may take some time to support the new configuration, - # wait for the nextcloud configuration file to disappear from nginx before checking the CalDAV/CardDAV URL. + # NGINX may take some time to support the new configuration, + # wait for the Nextcloud configuration file to disappear from NGINX before checking the CalDAV/CardDAV URL. timeout=30 for i in $(seq 1 $timeout); do if ! ynh_exec_warn_less nginx -T | grep --quiet "# configuration file /etc/nginx/conf.d/$domain.d/$app.conf:"; then @@ -18,7 +18,7 @@ wait_nginx_reload() { fi sleep 1 done - # Wait untils nginx has fully reloaded (avoid curl fail with http2) + # Wait untils NGINX has fully reloaded (avoid cURL fail with http2) sleep 2 } @@ -33,22 +33,22 @@ is_url_handled() { # Manage arguments with getopts ynh_handle_getopts_args "$@" - # Try to get the url with curl, and keep the http code and an eventual redirection url. + # Try to get the URL with cURL, and keep the http code and an eventual redirection URL. local curl_output="$(curl --insecure --silent --output /dev/null \ --write-out '%{http_code};%{redirect_url}' https://127.0.0.1$path --header "Host: $domain" --resolve $domain:443:127.0.0.1)" # Cut the output and keep only the first part to keep the http code local http_code="${curl_output%%;*}" - # Do the same thing but keep the second part, the redirection url + # Do the same thing but keep the second part, the redirection URL local redirection="${curl_output#*;}" - # Return 1 if the url isn't handled. - # Which means either curl got a 404 (or the admin) or the sso. - # A handled url should redirect to a publicly accessible url. - # Return 1 if the url has returned 404 + # Return 1 if the URL isn't handled. + # Which means either cURL got a 404 (or the admin) or the SSO. + # A handled URL should redirect to a publicly accessible URL. + # Return 1 if the URL has returned 404 if [ "$http_code" = "404" ] || [[ $redirection =~ "/yunohost/admin" ]]; then return 1 - # Return 1 if the url is redirected to the SSO + # Return 1 if the URL is redirected to the SSO elif [[ $redirection =~ "/yunohost/sso" ]]; then return 1 fi From a86e321c50f3c60e2c34842812b41b992277d2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 3 Aug 2024 09:52:05 +0200 Subject: [PATCH 057/136] Update backup --- scripts/backup | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/scripts/backup b/scripts/backup index da8f1725..d56a518c 100755 --- a/scripts/backup +++ b/scripts/backup @@ -28,42 +28,28 @@ ynh_backup --src_path="$install_dir" ynh_backup --src_path="$data_dir" --is_big #================================================= -# BACKUP THE NGINX CONFIGURATION -#================================================= - -ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -#================================================= -# BACKUP THE PHP-FPM CONFIGURATION +# SYSTEM CONFIGURATION #================================================= +# Backup the PHP-FPM configuration ynh_backup --src_path="/etc/php/$phpversion/fpm/pool.d/$app.conf" -#================================================= -# SPECIFIC BACKUP -#================================================= -# BACKUP LOGROTATE -#================================================= +# Backup the nginx configuration +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" +# Backup the logrotate configuration ynh_backup --src_path="/etc/logrotate.d/$app" -#================================================= -# BACKUP FAIL2BAN CONFIGURATION -#================================================= - +# Backup the Fail2Ban config ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf" ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf" #================================================= -# BACKUP THE CRON FILE +# BACKUP VARIOUS FILES #================================================= ynh_backup --src_path="/etc/cron.d/$app" -#================================================= -# BACKUP LOGS -#================================================= - ynh_backup --src_path="/var/log/$app" #================================================= From 31fd6a50f4b127432b680c7630776259eacb230d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 3 Aug 2024 09:53:16 +0200 Subject: [PATCH 058/136] minor typos --- scripts/change_url | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/change_url b/scripts/change_url index 8cadcea2..27839329 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -48,7 +48,7 @@ then # Change hostname for activity notifications exec_occ config:system:set overwrite.cli.url --value="https://${new_domain}${new_path}" - # Reload php fpm, necessary for force nextcloud to re-read config.php, cf opcache.revalidate_freq + # Reload PHP-FPM, necessary for force Nextcloud to re-read config.php, cf opcache.revalidate_freq ynh_systemd_action --service_name=php${phpversion}-fpm --action=reload fi From 1c8a1ba2c8ee6ff20fd23fe4c788617fae305846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Richter?= <2268851+x3rAx@users.noreply.github.com> Date: Wed, 14 Aug 2024 00:27:37 +0200 Subject: [PATCH 059/136] Fix removing ACL permissions on uninstall According to `man setfacl`, for the `--remove` option "[o]nly ACL entries without the perms field are accepted as parameters". --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index c39ac68c..664e4a09 100755 --- a/scripts/remove +++ b/scripts/remove @@ -30,7 +30,7 @@ ynh_secure_remove --file="/etc/cron.d/$app" for i in $(ls /home); do # Clean ACL in every directories in /home, except those which start with 'yunohost.' [[ ! $i == yunohost.* ]] \ - && setfacl --remove g:$app:rwx 2>&1 + && setfacl --remove g:$app 2>&1 done #================================================= From aae9736b4337cf6b2b09c0162f0f6f35621849c4 Mon Sep 17 00:00:00 2001 From: ^x3ro Date: Wed, 14 Aug 2024 00:56:32 +0200 Subject: [PATCH 060/136] Fix: Add missing `file` argument to `setfacl` --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index 664e4a09..78490fc3 100755 --- a/scripts/remove +++ b/scripts/remove @@ -30,7 +30,7 @@ ynh_secure_remove --file="/etc/cron.d/$app" for i in $(ls /home); do # Clean ACL in every directories in /home, except those which start with 'yunohost.' [[ ! $i == yunohost.* ]] \ - && setfacl --remove g:$app 2>&1 + && setfacl --remove g:$app -- "$i" 2>&1 done #================================================= From abfb04de912770b4ac07ca3dc5a453294c5c3df1 Mon Sep 17 00:00:00 2001 From: ^x3ro Date: Wed, 14 Aug 2024 01:15:44 +0200 Subject: [PATCH 061/136] Fix: Use absolute path for removing ACL permissions --- scripts/remove | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/remove b/scripts/remove index 78490fc3..1682dfc7 100755 --- a/scripts/remove +++ b/scripts/remove @@ -27,10 +27,10 @@ ynh_remove_fail2ban_config ynh_secure_remove --file="/etc/cron.d/$app" # Cleaning ACL in home directories -for i in $(ls /home); do +for path in /home/*; do # Clean ACL in every directories in /home, except those which start with 'yunohost.' - [[ ! $i == yunohost.* ]] \ - && setfacl --remove g:$app -- "$i" 2>&1 + [[ ! $path == /home/yunohost.* ]] \ + && setfacl --remove g:$app -- "$path" 2>&1 done #================================================= From 79ef249b5bdd01cb77a6b40fde5f9dc8d2e78449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 20 Aug 2024 20:30:48 +0200 Subject: [PATCH 062/136] Update manifest.toml --- manifest.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.toml b/manifest.toml index 1111f56f..8102692a 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.4~ynh2" +version = "29.0.5~ynh1" maintainers = ["kay0u"] @@ -19,7 +19,7 @@ code = "https://github.com/nextcloud/server" cpe = "cpe:2.3:a:nextcloud:nextcloud" [integration] -yunohost = ">= 11.2" +yunohost = ">= 11.2.27" architectures = ["amd64", "arm64", "armhf"] multi_instance = true @@ -65,8 +65,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.4.tar.bz2' - sha256 = '19c469e264b31ee80400f8396460854546569e88db4c15fc0854e192f96027eb' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.5.tar.bz2' + sha256 = 'c7fe9c61e5ec30a5e599e8f152a1825df684d30e899db0caa8868c8d67b53a2c' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From 2794d04a6b96334b6d2385c7c8098b6ebb65a8be Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 20 Aug 2024 18:30:53 +0000 Subject: [PATCH 063/136] Auto-update READMEs --- ALL_README.md | 1 + README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_ru.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++ README_zh_Hans.md | 2 +- 9 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 README_ru.md diff --git a/ALL_README.md b/ALL_README.md index 4ed64dd4..e3c80d23 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -6,4 +6,5 @@ - [Lire le README en français](README_fr.md) - [Le o README en galego](README_gl.md) - [Baca README dalam bahasa bahasa Indonesia](README_id.md) +- [Прочитать README на русский](README_ru.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README.md b/README.md index 81eb8a69..2530f573 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Shipped version:** 29.0.4~ynh1 +**Shipped version:** 29.0.5~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 9b75f1c2..33673b92 100644 --- a/README_es.md +++ b/README_es.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión actual:** 29.0.4~ynh1 +**Versión actual:** 29.0.5~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 8b722e45..f657a4ac 100644 --- a/README_eu.md +++ b/README_eu.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Paketatutako bertsioa:** 29.0.4~ynh1 +**Paketatutako bertsioa:** 29.0.5~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index f59d5831..064a9d9d 100644 --- a/README_fr.md +++ b/README_fr.md @@ -23,7 +23,7 @@ Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateu L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. -**Version incluse :** 29.0.4~ynh1 +**Version incluse :** 29.0.5~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 9a823a38..86d544fb 100644 --- a/README_gl.md +++ b/README_gl.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión proporcionada:** 29.0.4~ynh1 +**Versión proporcionada:** 29.0.5~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index 71cbfaaf..aa9d19a9 100644 --- a/README_id.md +++ b/README_id.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versi terkirim:** 29.0.4~ynh1 +**Versi terkirim:** 29.0.5~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 00000000..9442e138 --- /dev/null +++ b/README_ru.md @@ -0,0 +1,55 @@ + + +# Nextcloud для YunoHost + +[![Уровень интеграции](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Состояние работы](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Состояние сопровождения](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) + +[![Установите Nextcloud с YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Прочтите этот README на других языках.](./ALL_README.md)* + +> *Этот пакет позволяет Вам установить Nextcloud быстро и просто на YunoHost-сервер.* +> *Если у Вас нет YunoHost, пожалуйста, посмотрите [инструкцию](https://yunohost.org/install), чтобы узнать, как установить его.* + +## Обзор + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + + +**Поставляемая версия:** 29.0.5~ynh1 + +**Демо-версия:** + +## Снимки экрана + +![Снимок экрана Nextcloud](./doc/screenshots/screenshot.png) + +## Документация и ресурсы + +- Официальный веб-сайт приложения: +- Официальная документация пользователя: +- Официальная документация администратора: +- Репозиторий кода главной ветки приложения: +- Магазин YunoHost: +- Сообщите об ошибке: + +## Информация для разработчиков + +Пришлите Ваш запрос на слияние в [ветку `testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Чтобы попробовать ветку `testing`, пожалуйста, сделайте что-то вроде этого: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +или +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Больше информации о пакетировании приложений:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 465182e3..0d157c07 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**分发版本:** 29.0.4~ynh1 +**分发版本:** 29.0.5~ynh1 **演示:** From b5e5d83a401d4e7ebd2bf3c11a1771f7745e4408 Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 22 Aug 2024 16:47:13 +0200 Subject: [PATCH 064/136] [enh] oldstable support for upgrade --- config_panel.toml | 11 ++++++++++- scripts/upgrade | 21 ++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index e5e88aed..8fd00c7d 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -15,6 +15,15 @@ name = "Nextcloud configuration" ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" type = "button" style = "success" + + [main.version] + [main.version.version_to_follow] + ask.en = "Upgrade channel to use" + type = "select" + choices = ["stable", "oldstable"] + default = "stable" + help.en = "Recent major releases contains sometimes some annoying bugs or regressions. Using the oldstable channel during this period can be useful if you need high stability." + [main.addressbook] name = "Address book configuration" @@ -24,7 +33,7 @@ name = "Nextcloud configuration" type = "boolean" yes = "yes" no = "no" - + [main.php_fpm_config] name = "PHP-FPM configuration" diff --git a/scripts/upgrade b/scripts/upgrade index c4b764cd..25be3909 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -35,6 +35,13 @@ then ynh_die --message="Upgrading from Nextcloud < 22.2 is not supported anymore. You should first upgrade to 22.2 using: yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/41f5f902e7c7cd3c30a6793020562ba98b9bf3e9" fi +if [ -z "${version_to_follow:-}" ] +then + version_to_follow=stable + ynh_app_setting_set --app=$app --key=version_to_follow --value="$version_to_follow" +fi + + #================================================= # SPECIFIC UPGRADE #================================================= @@ -123,6 +130,11 @@ current_major_version=${current_version%%.*} last_version=$(ynh_read_manifest --manifest_key="resources.sources.main.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') last_major_version=${last_version%%.*} +if [[ "$version_to_follow" == "oldstable" ]] +then + last_major_version=$((last_major_version--)) + last_version=$(ynh_read_manifest --manifest_key="resources.sources.${last_major_version}.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') +fi if [[ "$last_major_version" != "$current_major_version" ]] then @@ -164,17 +176,20 @@ then fi # While the current version is not the last version, do an upgrade - while [ "$last_version" != "$current_version" ] + while [ "$last_version" > "$current_version" ] do next_major_version="$(( $current_major_version + 1 ))" + source_id="$next_major_version" if [[ "$next_major_version" -ge "$last_major_version" ]]; then ynh_print_info --message="Upgrading to Nextcloud $last_version" cp -a ../sources/patches_last_version/* ../sources/patches - source_id="main" + if [[ "$version_to_follow" != "oldstable" ]] + then + source_id="main" + fi else ynh_print_info --message="Upgrading to Nextcloud $next_major_version" - source_id="$next_major_version" fi # Create a temporary directory From 9150d4eceefa38a7438e6af4a81a6447c24a3fd4 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 22 Aug 2024 14:47:53 +0000 Subject: [PATCH 065/136] Auto-update READMEs --- ALL_README.md | 1 + README_ru.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 README_ru.md diff --git a/ALL_README.md b/ALL_README.md index 4ed64dd4..e3c80d23 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -6,4 +6,5 @@ - [Lire le README en français](README_fr.md) - [Le o README en galego](README_gl.md) - [Baca README dalam bahasa bahasa Indonesia](README_id.md) +- [Прочитать README на русский](README_ru.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 00000000..d46497cc --- /dev/null +++ b/README_ru.md @@ -0,0 +1,55 @@ + + +# Nextcloud для YunoHost + +[![Уровень интеграции](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Состояние работы](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Состояние сопровождения](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) + +[![Установите Nextcloud с YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Прочтите этот README на других языках.](./ALL_README.md)* + +> *Этот пакет позволяет Вам установить Nextcloud быстро и просто на YunoHost-сервер.* +> *Если у Вас нет YunoHost, пожалуйста, посмотрите [инструкцию](https://yunohost.org/install), чтобы узнать, как установить его.* + +## Обзор + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + + +**Поставляемая версия:** 29.0.4~ynh1 + +**Демо-версия:** + +## Снимки экрана + +![Снимок экрана Nextcloud](./doc/screenshots/screenshot.png) + +## Документация и ресурсы + +- Официальный веб-сайт приложения: +- Официальная документация пользователя: +- Официальная документация администратора: +- Репозиторий кода главной ветки приложения: +- Магазин YunoHost: +- Сообщите об ошибке: + +## Информация для разработчиков + +Пришлите Ваш запрос на слияние в [ветку `testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Чтобы попробовать ветку `testing`, пожалуйста, сделайте что-то вроде этого: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +или +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Больше информации о пакетировании приложений:** From 66412c06012d23dc456fba8f2447ae414fce7683 Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 22 Aug 2024 21:39:19 +0200 Subject: [PATCH 066/136] [debug] infinite loop on upgrade --- scripts/upgrade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 25be3909..4918b7a1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -132,7 +132,7 @@ last_version=$(ynh_read_manifest --manifest_key="resources.sources.main.url" | g last_major_version=${last_version%%.*} if [[ "$version_to_follow" == "oldstable" ]] then - last_major_version=$((last_major_version--)) + last_major_version=$(( $last_major_version - 1 )) last_version=$(ynh_read_manifest --manifest_key="resources.sources.${last_major_version}.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') fi @@ -178,7 +178,7 @@ then # While the current version is not the last version, do an upgrade while [ "$last_version" > "$current_version" ] do - + ynh_print_info --message="last: $last_version | current: $current_version" next_major_version="$(( $current_major_version + 1 ))" source_id="$next_major_version" if [[ "$next_major_version" -ge "$last_major_version" ]]; then From a448839b06e4f65a6f844b5cc1e90d04b72e0af6 Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 22 Aug 2024 23:40:33 +0200 Subject: [PATCH 067/136] [fix] infinite loop on upgrade --- scripts/upgrade | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 4918b7a1..ea3970b8 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -176,9 +176,8 @@ then fi # While the current version is not the last version, do an upgrade - while [ "$last_version" > "$current_version" ] + while [[ "$last_version" > "$current_version" ]] do - ynh_print_info --message="last: $last_version | current: $current_version" next_major_version="$(( $current_major_version + 1 ))" source_id="$next_major_version" if [[ "$next_major_version" -ge "$last_major_version" ]]; then From d8fefcea6c4cbba0929737b3a0589aa2481ff58e Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 23 Aug 2024 09:52:07 +0200 Subject: [PATCH 068/136] add help key in manifest --- config_panel.toml | 5 ++--- manifest.toml | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 8fd00c7d..00e0377f 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -15,7 +15,7 @@ name = "Nextcloud configuration" ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" type = "button" style = "success" - + [main.version] [main.version.version_to_follow] ask.en = "Upgrade channel to use" @@ -24,7 +24,6 @@ name = "Nextcloud configuration" default = "stable" help.en = "Recent major releases contains sometimes some annoying bugs or regressions. Using the oldstable channel during this period can be useful if you need high stability." - [main.addressbook] name = "Address book configuration" @@ -33,7 +32,7 @@ name = "Nextcloud configuration" type = "boolean" yes = "yes" no = "no" - + [main.php_fpm_config] name = "PHP-FPM configuration" diff --git a/manifest.toml b/manifest.toml index 03535437..0076409c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -61,7 +61,8 @@ ram.runtime = "512M" default = true [install.version_to_follow] - ask.en = "Which version do you want" + ask.en = "Upgrade channel to use" + help.en = "Recent major releases contains sometimes some annoying bugs or regressions. Using the oldstable channel during this period can be useful if you need high stability." type = "select" choices = ["stable", "oldstable"] default = "stable" From a483dd7fc6e9743b43d1a8ea54e5375680780862 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 23 Aug 2024 09:53:12 +0200 Subject: [PATCH 069/136] we don't want to worry about pre/post decrement --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index b36fb315..b3c27f7d 100755 --- a/scripts/install +++ b/scripts/install @@ -28,7 +28,7 @@ source_id="main" if [ "$version_to_follow" == "oldstable" ]; then last_version=$(ynh_read_manifest --manifest_key="resources.sources.main.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') last_major_version=${last_version%%.*} - source_id=$((last_major_version--)) + last_major_version=$(( $last_major_version - 1 )) fi # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source --dest_dir="$install_dir" --source_id="$source_id" From 8fc95edaf7b11474784bd28d06e4c90700f39954 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 23 Aug 2024 09:53:23 +0200 Subject: [PATCH 070/136] add tests for oldstable --- tests.toml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests.toml b/tests.toml index cdd5e776..26855128 100644 --- a/tests.toml +++ b/tests.toml @@ -2,6 +2,8 @@ test_format = 1.0 [default] + args.version_to_follow = "stable" + # ------------------------------- # Commits to test upgrade from # ------------------------------- @@ -11,3 +13,9 @@ test_format = 1.0 test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + +[oldstable] + + args.version_to_follow = "oldstable" + test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" \ No newline at end of file From d7d24034cfb81c63ca63e9ee388faba53debd39d Mon Sep 17 00:00:00 2001 From: Kayou Date: Tue, 27 Aug 2024 14:52:11 +0200 Subject: [PATCH 071/136] Add notify push option (#417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add notify_push option * self-test notify_push * fix notify_app * new permission hpb, some fixes * fix the restore script * fix restore² * fix upgrade * fix socket path * Update doc/DISCLAIMER_fr.md * split nginx conf * use official helpers with modified args * Auto-update READMEs * update nginx conf, add new services * add tests * add arch var * tests: enable_notify_push is false by default * fix upgrade * final_path -> install_dir * fix socket nginx path * add notify_push nginx conf before, so the reload in ynh_add_nginx_config load it * fully functional version * readd a removed fix * run cron task after notify push setup * Auto-update READMEs * remove systemd files * add notify push in config panel * add cron again because to make notify push happy * fix indent * enable/disable the notify push path * fix path unit * exec only for nextcloud user * move sock file to /var/run * start notify-push after the watcher * ² * remove warning * cron can sometimes fail when the database is not fully initialized, retries the cron job several times and catch catch the error on failure * oupsie * Apply suggestions from code review Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --------- Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> Co-authored-by: yunohost-bot --- conf/config.json | 3 +- conf/nginx.conf | 2 ++ conf/notify_push.conf | 8 +++++ conf/systemd.service | 13 +++++++ conf/watcher.path | 11 ++++++ conf/watcher.service | 15 ++++++++ config_panel.toml | 12 +++++-- doc/ADMIN.md | 4 +++ doc/ADMIN_fr.md | 4 +++ manifest.toml | 6 ++++ scripts/backup | 20 ++++++++++- scripts/change_url | 50 ++++++++++++++++++++++++-- scripts/config | 84 ++++++++++++++++++++++++++++++++++++++----- scripts/install | 53 +++++++++++++++++++++++++++ scripts/remove | 8 +++++ scripts/restore | 45 +++++++++++++++++++++++ scripts/upgrade | 66 ++++++++++++++++++++++++++++++++++ tests.toml | 9 +++++ 18 files changed, 398 insertions(+), 15 deletions(-) create mode 100644 conf/notify_push.conf create mode 100644 conf/systemd.service create mode 100644 conf/watcher.path create mode 100644 conf/watcher.service diff --git a/conf/config.json b/conf/config.json index 6e4790cc..02d85721 100644 --- a/conf/config.json +++ b/conf/config.json @@ -30,7 +30,8 @@ "verify_peer": false, "verify_peer_name": false } - } + }, + "trusted_proxies": [ "127.0.0.1", "::1" ] }, "apps": { "user_ldap": { diff --git a/conf/nginx.conf b/conf/nginx.conf index 5a4f22a3..aabd4471 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -165,6 +165,8 @@ location ^~ __PATH__/ { try_files $uri / __PATH__/index.php$request_uri; } + include conf.d/__DOMAIN__.d/__APP__.d/*.conf; + # show YunoHost panel access include conf.d/yunohost_panel.conf.inc; } diff --git a/conf/notify_push.conf b/conf/notify_push.conf new file mode 100644 index 00000000..f2fb0520 --- /dev/null +++ b/conf/notify_push.conf @@ -0,0 +1,8 @@ +location ^~ __PATH__/push/ { + proxy_pass http://unix:/var/run/__APP__/notify-push.sock:/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +} \ No newline at end of file diff --git a/conf/systemd.service b/conf/systemd.service new file mode 100644 index 00000000..855a294f --- /dev/null +++ b/conf/systemd.service @@ -0,0 +1,13 @@ +[Unit] +Description = Push daemon for Nextcloud clients + +[Service] +Environment=SOCKET_PATH=/var/run/__APP__/notify-push.sock +Environment=ALLOW_SELF_SIGNED=true +ExecStart=__INSTALL_DIR__/apps/notify_push/bin/__ARCH__/notify_push __INSTALL_DIR__/config/config.php +Type=notify +User=__APP__ +Group=__APP__ + +[Install] +WantedBy = multi-user.target \ No newline at end of file diff --git a/conf/watcher.path b/conf/watcher.path new file mode 100644 index 00000000..67a5298b --- /dev/null +++ b/conf/watcher.path @@ -0,0 +1,11 @@ +[Unit] +Description=Restart Push daemon for Nextcloud clients when it receives updates +Documentation=https://github.com/nextcloud/notify_push +PartOf=__APP__-notify-push-watcher.service + +[Path] +PathModified=/var/www/nextcloud/apps/notify_push/bin/__ARCH__/notify_push +Unit=__APP__-notify-push-watcher.service + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/conf/watcher.service b/conf/watcher.service new file mode 100644 index 00000000..e2d9cfdf --- /dev/null +++ b/conf/watcher.service @@ -0,0 +1,15 @@ +[Unit] +Description=Restart Push daemon for Nextcloud clients when it receives updates +Documentation=https://github.com/nextcloud/notify_push +#Requires=__APP__-notify-push.service +After=__APP__-notify-push.service +StartLimitIntervalSec=10 +StartLimitBurst=5 + +[Service] +Type=oneshot +ExecStartPre=/usr/bin/chmod u+x __INSTALL_DIR__/apps/notify_push/bin/__ARCH__/notify_push +ExecStart=/usr/bin/systemctl restart __APP__-notify-push.service + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/config_panel.toml b/config_panel.toml index e5e88aed..b583fb4f 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -9,7 +9,7 @@ name = "Nextcloud configuration" [main.maintenance.maintenance_mode] ask = "Enable maintenance mode" type = "boolean" - default = "0" + default = false [main.maintenance.set_permissions_button] ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" @@ -22,8 +22,14 @@ name = "Nextcloud configuration" [main.addressbook.system_addressbook_exposed] ask = "Should there be a system address book listing all users, accessible by all users?" type = "boolean" - yes = "yes" - no = "no" + + [main.notify_push] + name = "Notify Push configuration" + + [main.notify_push.enable_notify_push] + ask.en = "Configure the High Performance Backend?" + ask.fr = "Configurer le Backend Hautes Performances ?" + type = "boolean" [main.php_fpm_config] name = "PHP-FPM configuration" diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 8d401d2f..9b19c1b2 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -12,6 +12,10 @@ Alternatively, you may open a 'Nextcloud shell' with `sudo yunohost app shell __ ONLYOFFICE is an online rich text document editor which can be integrated in Nextcloud +#### High Performance Backend + +High Performance Backend is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about + #### With YunoHost App (ARM64 support, better performance) For better performance and ARM64 support (Raspberry Pi, OLinuXino...), install the [OnlyOffice YunoHost app](https://apps.yunohost.org/app/onlyoffice) and connect it to Nextcloud, see the tutorial in the [doc of onlyoffice_ynh package](https://github.com/YunoHost-Apps/onlyoffice_ynh/blob/master/README_fr.md#configuration-de-onlyoffice-server) diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index 06b76b12..5b52928a 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -12,6 +12,10 @@ Ou bien, vous pouvez ouvrir un "shell Nextcloud" avec `sudo yunohost app shell _ ONLYOFFICE est un éditeur de texte enrichi en ligne qui peut s'intégrer dans Nextcloud +#### Backend Hautes Performances + +Le backend Hautes Performances est une application sur Nextcloud qui devrait accélérer l'instance, plus d'informations ici : https://github.com/nextcloud/notify_push#about + #### Avec l'application YunoHost (support ARM64, meilleures performances) Pour de meilleures performances et le support de ARM64 (Raspberry Pi, OLinuXino...), installez l'[app YunoHost OnlyOffice](https://apps.yunohost.org/app/onlyoffice), puis connectez-la à Nextcloud : voir le tutoriel dans la [doc du paquet onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh/blob/master/README_fr.md#configuration-de-onlyoffice-server) diff --git a/manifest.toml b/manifest.toml index 8102692a..692685d4 100644 --- a/manifest.toml +++ b/manifest.toml @@ -60,6 +60,12 @@ ram.runtime = "512M" type = "boolean" default = true + [install.enable_notify_push] + ask.en = "Configure the High Performance Backend?" + ask.fr = "Configurer le Backend Hautes Performances ?" + type = "boolean" + default = false + [resources] [resources.sources] diff --git a/scripts/backup b/scripts/backup index d56a518c..56e6e0b2 100755 --- a/scripts/backup +++ b/scripts/backup @@ -28,7 +28,14 @@ ynh_backup --src_path="$install_dir" ynh_backup --src_path="$data_dir" --is_big #================================================= -# SYSTEM CONFIGURATION +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.d" + +#================================================= +# BACKUP THE PHP-FPM CONFIGURATION #================================================= # Backup the PHP-FPM configuration @@ -59,6 +66,17 @@ ynh_print_info --message="Backing up the MySQL database..." ynh_mysql_dump_db --database="$db_name" --default_character_set="utf8mb4" > db.sql +#================================================= +# BACKUP THE NOTIFY_PUSH APP +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + ynh_backup --src_path="/etc/systemd/system/${app}-notify-push.service" + ynh_backup --src_path="/etc/systemd/system/${app}-notify-push-watcher.service" + ynh_backup --src_path="/etc/systemd/system/${app}-notify-push-watcher.path" +fi + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/change_url b/scripts/change_url index 27839329..326594f8 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -50,16 +50,62 @@ then # Reload PHP-FPM, necessary for force Nextcloud to re-read config.php, cf opcache.revalidate_freq ynh_systemd_action --service_name=php${phpversion}-fpm --action=reload + + mv /etc/nginx/conf.d/$old_domain.d/$app.d /etc/nginx/conf.d/$new_domain.d/$app.d +fi + +#================================================= +# CONFIGURE NOTIFY_PUSH APP +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + domain="$new_domain" + path_url="$new_path" + + ynh_add_config --template="notify_push.conf" --destination="/etc/nginx/conf.d/$domain.d/$app.d/notify_push.conf" + + ynh_systemd_action --service_name=nginx --action=reload + + case $YNH_ARCH in + amd64) arch="x86_64";; + arm64) arch="aarch64";; + armel|armhf) arch="armv7";; + esac + + ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" + systemctl enable --now ${app}-notify-push-watcher.path + ynh_add_systemd_config --service="${app}-notify-push" + + count=0 + while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] + do + sleep 1 + count=$((count + 1)) + done + + ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" --action=restart + + exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push + + if ! exec_occ notify_push:self-test; then + ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + fi fi #================================================= -# SETUP SSOWAT +# GENERIC FINALISATION #================================================= -ynh_script_progression --message="Configuring permissions..." +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading NGINX web server..." # Temporary fix for the API permission (workaround for https://github.com/YunoHost/issues/issues/2294 ) ynh_permission_url --permission="api" --url="re:$new_domain\/.well-known\/.*" --auth_header="false" --clear_urls +ynh_systemd_action --service_name=nginx --action=reload + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/config b/scripts/config index e2310095..189c4489 100644 --- a/scripts/config +++ b/scripts/config @@ -18,6 +18,11 @@ ynh_abort_if_errors phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) current_fpm_footprint=$(ynh_app_setting_get --app=$app --key=fpm_footprint) +exec_occ() { + (cd "$install_dir" && ynh_exec_as "$app" \ + php${phpversion} --define apc.enable_cli=1 occ --no-interaction --no-ansi "$@") +} + #================================================= # SPECIFIC GETTERS FOR TOML SHORT KEY #================================================= @@ -39,8 +44,7 @@ get__maintenance_mode() { } get__system_addressbook_exposed() { - echo $(cd "$install_dir" && ynh_exec_as "$app" \ - php${phpversion} --define apc.enable_cli=1 occ config:app:get dav system_addressbook_exposed) + echo $(exec_occ config:app:get dav system_addressbook_exposed) } get__fpm_footprint() { @@ -73,24 +77,88 @@ get__fpm_free_footprint() { set__maintenance_mode() { if [ "$maintenance_mode" -eq "0" ]; then # If maintenance_mode was set to 0, disable maintenance mode - (cd "$install_dir" && ynh_exec_as "$app" \ - php${phpversion} --define apc.enable_cli=1 occ --no-interaction --no-ansi maintenance:mode --off) + exec_occ maintenance:mode --off ynh_print_info "Maintenance mode disabled" elif [ "$maintenance_mode" -eq "1" ]; then # If maintenance_mode was set to 1, enable maintenance mode - (cd "$install_dir" && ynh_exec_as "$app" \ - php${phpversion} --define apc.enable_cli=1 occ --no-interaction --no-ansi maintenance:mode --on) + exec_occ maintenance:mode --on ynh_print_info "Maintenance mode enabled" fi ynh_app_setting_set --app=$app --key=maintenance_mode --value="$maintenance_mode" } set__system_addressbook_exposed() { - (cd "$install_dir" && ynh_exec_as "$app" \ - php${phpversion} --define apc.enable_cli=1 occ config:app:set dav system_addressbook_exposed --value="$system_addressbook_exposed") + exec_occ config:app:set dav system_addressbook_exposed --value="$system_addressbook_exposed" ynh_print_info "System addressbook is exposed: $system_addressbook_exposed" } + +set__enable_notify_push() { + if [ "$enable_notify_push" -eq "0" ]; then + nginx_extra_conf_dir="/etc/nginx/conf.d/$domain.d/$app.d" + ynh_secure_remove --file="$nginx_extra_conf_dir/notify_push.conf" + ynh_systemd_action --service_name="nginx" --action=reload + + # If notify_push is enabled, disable it + if exec_occ app:list | awk '/Enabled/{f=1;next} f' | grep -q -w notify_push; then + exec_occ app:disable notify_push + fi + + ynh_remove_systemd_config --service="${app}-notify-push" + systemctl disable --now "${app}-notify-push-watcher.path" + ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_remove_systemd_config --service="${app}-notify-push-watcher" + + ynh_print_info "Notify push disabled" + elif [ "$enable_notify_push" -eq "1" ]; then + nginx_extra_conf_dir="/etc/nginx/conf.d/$domain.d/$app.d" + mkdir -p "$nginx_extra_conf_dir" + + ynh_add_config --template="notify_push.conf" --destination="$nginx_extra_conf_dir/notify_push.conf" + + ynh_systemd_action --service_name="nginx" --action=reload + + # If notify_push is disabled, reenable it + if exec_occ app:list | awk '/Disabled/{f=1;next} f' | grep -q -w notify_push; then + exec_occ app:enable notify_push + # If notify_push is not installed, install it + elif ! exec_occ app:list | awk '/Enabled/{f=1;next} /Disabled/{f=0} f' | grep -q -w notify_push; then + exec_occ app:install notify_push + fi + exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push + + mkdir -p /var/run/$app/ + chown $app: /var/run/$app/ + + case $YNH_ARCH in + amd64) arch="x86_64";; + arm64) arch="aarch64";; + armel|armhf) arch="armv7";; + esac + + ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" + systemctl enable --now ${app}-notify-push-watcher.path + ynh_add_systemd_config --service="${app}-notify-push" + + count=0 + while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] + do + sleep 1 + count=$((count + 1)) + done + + ynh_systemd_action --service_name="${app}-notify-push-watcher" --action=restart + ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" + + if ! exec_occ notify_push:self-test; then + ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + fi + ynh_print_info "Notify push enabled" + fi + ynh_app_setting_set --app=$app --key=enable_notify_push --value="$enable_notify_push" +} + set__fpm_footprint() { if [ "$fpm_footprint" != "specific" ] then diff --git a/scripts/install b/scripts/install index 0987b848..2df768af 100755 --- a/scripts/install +++ b/scripts/install @@ -49,6 +49,14 @@ then sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "../conf/nginx.conf" fi +nginx_extra_conf_dir="/etc/nginx/conf.d/$domain.d/$app.d" +mkdir -p "$nginx_extra_conf_dir" + +if [ $enable_notify_push -eq 1 ] +then + ynh_add_config --template="notify_push.conf" --destination="$nginx_extra_conf_dir/notify_push.conf" +fi + # Create a dedicated NGINX config ynh_add_nginx_config @@ -195,6 +203,30 @@ exec_occ config:app:set dav system_addressbook_exposed --value="$system_addressb # Calculate and store the config file checksum into the app settings ynh_store_file_checksum --file="$install_dir/config/config.php" +#================================================= +# CONFIGURE NOTIFY_PUSH APP +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + exec_occ app:install notify_push + exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push + + mkdir -p /var/run/$app/ + chown $app: /var/run/$app/ + + case $YNH_ARCH in + amd64) arch="x86_64";; + arm64) arch="aarch64";; + armel|armhf) arch="armv7";; + esac + + ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" + systemctl enable --now ${app}-notify-push-watcher.path + ynh_add_systemd_config --service="${app}-notify-push" +fi + #================================================= # ADD A CRON JOB #================================================= @@ -261,6 +293,27 @@ ynh_script_progression --message="Configuring Fail2Ban..." --weight=8 # Create a dedicated Fail2Ban config ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.*Login failed: '.*' \(Remote IP: ''.*$" --max_retry=5 +#================================================= +# CHECK IF NOTIFY_PUSH WORKS +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + count=0 + while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] + do + sleep 1 + count=$((count + 1)) + done + + ynh_systemd_action --service_name="${app}-notify-push-watcher" --action=restart + ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" + + if ! exec_occ notify_push:self-test; then + ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + fi +fi + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/remove b/scripts/remove index c39ac68c..0cc72dba 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,6 +12,7 @@ ynh_script_progression --message="Removing system configurations related to $app # Remove the dedicated NGINX config ynh_remove_nginx_config +ynh_secure_remove --file="/etc/nginx/conf.d/$domain.d/$app.d" # Remove the dedicated PHP-FPM config ynh_remove_fpm_config @@ -22,6 +23,13 @@ ynh_remove_logrotate # Remove the dedicated Fail2Ban config ynh_remove_fail2ban_config +# Remove notify push +ynh_remove_systemd_config --service="${app}-notify-push" +ynh_exec_warn_less systemctl disable --now ${app}-notify-push-watcher.path +ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" +ynh_remove_systemd_config --service="${app}-notify-push-watcher" +ynh_secure_remove --file="/var/run/$app" + # Remove a cron file # TODO: Ensure that cron job is not running (How !?) ynh_secure_remove --file="/etc/cron.d/$app" diff --git a/scripts/restore b/scripts/restore index 9ae36115..1393ae34 100755 --- a/scripts/restore +++ b/scripts/restore @@ -36,6 +36,7 @@ ynh_add_fpm_config #================================================= ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.d" # Check if .well-known is available for this domain if is_url_handled --domain="$domain" --path="/.well-known/caldav" || is_url_handled --domain="$domain" --path="/.well-known/carddav" @@ -123,6 +124,24 @@ fi ynh_systemd_action --action=restart --service_name=fail2ban +#================================================= +# RESTORE THE NOTIFY_PUSH APP +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + mkdir -p /var/run/$app/ + chown $app: /var/run/$app/ + + ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push.service" + ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push-watcher.service" + ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push-watcher.path" + + systemctl enable --now "${app}-notify-push-watcher.service" --quiet + systemctl enable --now "${app}-notify-push-watcher.path" --quiet + systemctl enable --now "${app}-notify-push.service" --quiet +fi + #================================================= # GENERIC FINALIZATION #================================================= @@ -132,6 +151,32 @@ ynh_script_progression --message="Reloading NGINX web server..." --weight=3 ynh_systemd_action --service_name=nginx --action=reload +#================================================= +# CHECK IF NOTIFY_PUSH WORKS +#================================================= + +exec_occ() { + (cd "$install_dir" && ynh_exec_as "$app" \ + php${phpversion} --define apc.enable_cli=1 occ --no-interaction --no-ansi "$@") +} + +if [ $enable_notify_push -eq 1 ] +then + count=0 + while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] + do + sleep 1 + count=$((count + 1)) + done + + ynh_systemd_action --service_name="${app}-notify-push-watcher" --action=restart + ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" --action=restart + + if ! exec_occ notify_push:self-test; then + ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + fi +fi + #================================================= # END OF SCRIPT #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index c4b764cd..7706d059 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -24,6 +24,11 @@ elif [ "${system_addressbook_exposed,,}" = "no" ]; then system_addressbook_exposed=0 fi +if [ -z ${enable_notify_push:-} ]; then + ynh_app_setting_set --app=$app --key=enable_notify_push --value=0 + enable_notify_push=0 +fi + # Remove the option backup_core_only if it's in the settings.yml file ynh_app_setting_delete --app=$app --key=backup_core_only @@ -365,9 +370,49 @@ then sed --in-place --regexp-extended '/location = \/\.well\-known\/(caldav|carddav)/d' "../conf/nginx.conf" fi +# Create a dedicated NGINX config +nginx_extra_conf_dir="/etc/nginx/conf.d/$domain.d/$app.d" +mkdir -p "$nginx_extra_conf_dir" + +if [ $enable_notify_push -eq 1 ] +then + ynh_add_config --template="notify_push.conf" --destination="$nginx_extra_conf_dir/notify_push.conf" +fi + # Create a dedicated NGINX config ynh_add_nginx_config +#================================================= +# CONFIGURE NOTIFY_PUSH APP +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + # If notify_push is disabled, reenable it + if exec_occ app:list | awk '/Disabled/{f=1;next} f' | grep -q -w notify_push; then + exec_occ app:enable notify_push + # If notify_push is not installed, install it + elif ! exec_occ app:list | awk '/Enabled/{f=1;next} /Disabled/{f=0} f' | grep -q -w notify_push; then + exec_occ app:install notify_push + fi + exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push + + mkdir -p /var/run/$app/ + chown $app: /var/run/$app/ + + case $YNH_ARCH in + amd64) arch="x86_64";; + arm64) arch="aarch64";; + armel|armhf) arch="armv7";; + esac + + ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" + systemctl enable --now ${app}-notify-push-watcher.path + ynh_add_systemd_config --service="${app}-notify-push" +fi + + #================================================= # CRON JOB #================================================= @@ -392,6 +437,27 @@ ynh_use_logrotate --non-append # Create a dedicated Fail2Ban config ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.*Login failed: '.*' \(Remote IP: ''.*$" --max_retry=5 +#================================================= +# CHECK IF NOTIFY_PUSH WORKS +#================================================= + +if [ $enable_notify_push -eq 1 ] +then + count=0 + while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] + do + sleep 1 + count=$((count + 1)) + done + + ynh_systemd_action --service_name="${app}-notify-push-watcher" --action=restart + ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" --action=restart + + if ! exec_occ notify_push:self-test; then + ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + fi +fi + #================================================= # END OF SCRIPT #================================================= diff --git a/tests.toml b/tests.toml index cdd5e776..a7671f20 100644 --- a/tests.toml +++ b/tests.toml @@ -2,6 +2,8 @@ test_format = 1.0 [default] + args.enable_notify_push = "0" + # ------------------------------- # Commits to test upgrade from # ------------------------------- @@ -11,3 +13,10 @@ test_format = 1.0 test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + +[notify_push_test] + + args.enable_notify_push = "1" + test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + From aca04bd274698ebd90e7ee53e9b8f669eecc7b83 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Fri, 30 Aug 2024 18:52:13 +0200 Subject: [PATCH 072/136] Remove ~duplicate pre-upgrade message (#723) --- doc/PRE_UPGRADE.d/28.0.3~ynh1.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 doc/PRE_UPGRADE.d/28.0.3~ynh1.md diff --git a/doc/PRE_UPGRADE.d/28.0.3~ynh1.md b/doc/PRE_UPGRADE.d/28.0.3~ynh1.md deleted file mode 100644 index 663bc771..00000000 --- a/doc/PRE_UPGRADE.d/28.0.3~ynh1.md +++ /dev/null @@ -1,3 +0,0 @@ -If you are upgrading to a new major version of Nextcloud, please make sure that your Nextcloud apps are up to date from Nextcloud's administration panel beforehand. - -Additionally, if you installed specific Nextcloud apps, we recommend making sure that they are compatible with the new major version. YunoHost will attempt to check this automatically at the very beginning of the upgrade, but a manual check doesn't hurt either. For Nextcloud 28, this forum thread might be helpful : . From 19ae3b021f4395d4543181836aee1a1ce4932919 Mon Sep 17 00:00:00 2001 From: Kayou Date: Sun, 1 Sep 2024 10:51:41 +0200 Subject: [PATCH 073/136] Fix notify_push after reboot/restart the service, create the folder /var/run/nextcloud via systemd --- conf/systemd.service | 1 + scripts/config | 3 --- scripts/install | 3 --- scripts/remove | 1 - scripts/restore | 3 --- scripts/upgrade | 3 --- 6 files changed, 1 insertion(+), 13 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 855a294f..bbe65732 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -4,6 +4,7 @@ Description = Push daemon for Nextcloud clients [Service] Environment=SOCKET_PATH=/var/run/__APP__/notify-push.sock Environment=ALLOW_SELF_SIGNED=true +RuntimeDirectory=__APP__ ExecStart=__INSTALL_DIR__/apps/notify_push/bin/__ARCH__/notify_push __INSTALL_DIR__/config/config.php Type=notify User=__APP__ diff --git a/scripts/config b/scripts/config index 189c4489..d756fa9f 100644 --- a/scripts/config +++ b/scripts/config @@ -127,9 +127,6 @@ set__enable_notify_push() { fi exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push - mkdir -p /var/run/$app/ - chown $app: /var/run/$app/ - case $YNH_ARCH in amd64) arch="x86_64";; arm64) arch="aarch64";; diff --git a/scripts/install b/scripts/install index 2df768af..a4ef70aa 100755 --- a/scripts/install +++ b/scripts/install @@ -212,9 +212,6 @@ then exec_occ app:install notify_push exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push - mkdir -p /var/run/$app/ - chown $app: /var/run/$app/ - case $YNH_ARCH in amd64) arch="x86_64";; arm64) arch="aarch64";; diff --git a/scripts/remove b/scripts/remove index 7f67cf5b..4bf6421b 100755 --- a/scripts/remove +++ b/scripts/remove @@ -28,7 +28,6 @@ ynh_remove_systemd_config --service="${app}-notify-push" ynh_exec_warn_less systemctl disable --now ${app}-notify-push-watcher.path ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" ynh_remove_systemd_config --service="${app}-notify-push-watcher" -ynh_secure_remove --file="/var/run/$app" # Remove a cron file # TODO: Ensure that cron job is not running (How !?) diff --git a/scripts/restore b/scripts/restore index 1393ae34..d9544306 100755 --- a/scripts/restore +++ b/scripts/restore @@ -130,9 +130,6 @@ ynh_systemd_action --action=restart --service_name=fail2ban if [ $enable_notify_push -eq 1 ] then - mkdir -p /var/run/$app/ - chown $app: /var/run/$app/ - ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push.service" ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push-watcher.service" ynh_restore_file --origin_path="/etc/systemd/system/${app}-notify-push-watcher.path" diff --git a/scripts/upgrade b/scripts/upgrade index 7706d059..53131094 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -397,9 +397,6 @@ then fi exec_occ config:app:set notify_push base_endpoint --value https://$domain${path_url%/}/push - mkdir -p /var/run/$app/ - chown $app: /var/run/$app/ - case $YNH_ARCH in amd64) arch="x86_64";; arm64) arch="aarch64";; From aa5842d2b6aa3ffbbd54f967784e7016d74a01ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:24:36 +0200 Subject: [PATCH 074/136] Update manifest.toml --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 692685d4..78d412b0 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.5~ynh1" +version = "29.0.6~ynh1" maintainers = ["kay0u"] @@ -71,8 +71,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.5.tar.bz2' - sha256 = 'c7fe9c61e5ec30a5e599e8f152a1825df684d30e899db0caa8868c8d67b53a2c' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.6.tar.bz2' + sha256 = 'dc60be03fd17e30bafef2a4d4feb2d096aa77a4c6b4f21c985760e537f8401e3' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From 6f7509a790bcdf0fc067f9bc0b4c73ed7605948c Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 3 Sep 2024 12:24:41 +0000 Subject: [PATCH 075/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2530f573..759443d9 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Shipped version:** 29.0.5~ynh1 +**Shipped version:** 29.0.6~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 33673b92..6b7c9c72 100644 --- a/README_es.md +++ b/README_es.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión actual:** 29.0.5~ynh1 +**Versión actual:** 29.0.6~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index f657a4ac..5f56146e 100644 --- a/README_eu.md +++ b/README_eu.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Paketatutako bertsioa:** 29.0.5~ynh1 +**Paketatutako bertsioa:** 29.0.6~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 064a9d9d..f325e31b 100644 --- a/README_fr.md +++ b/README_fr.md @@ -23,7 +23,7 @@ Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateu L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. -**Version incluse :** 29.0.5~ynh1 +**Version incluse :** 29.0.6~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 86d544fb..7caea123 100644 --- a/README_gl.md +++ b/README_gl.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión proporcionada:** 29.0.5~ynh1 +**Versión proporcionada:** 29.0.6~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index aa9d19a9..5cb871a2 100644 --- a/README_id.md +++ b/README_id.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versi terkirim:** 29.0.5~ynh1 +**Versi terkirim:** 29.0.6~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md index 9442e138..782ca443 100644 --- a/README_ru.md +++ b/README_ru.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Поставляемая версия:** 29.0.5~ynh1 +**Поставляемая версия:** 29.0.6~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 0d157c07..02dce2c7 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**分发版本:** 29.0.5~ynh1 +**分发版本:** 29.0.6~ynh1 **演示:** From 46bffb07976b445c65ab6555c3055dde3b6172d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:38:33 +0200 Subject: [PATCH 076/136] Update backup --- scripts/backup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/backup b/scripts/backup index 56e6e0b2..d9ecab9b 100755 --- a/scripts/backup +++ b/scripts/backup @@ -35,7 +35,7 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.d" #================================================= -# BACKUP THE PHP-FPM CONFIGURATION +# SYSTEM CONFIGURATION #================================================= # Backup the PHP-FPM configuration From af3a5717eacafe7ebe92bb5616ab74c6cbd74d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:17:29 +0200 Subject: [PATCH 077/136] 29.0.7 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 78d412b0..286d942b 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.6~ynh1" +version = "29.0.7~ynh1" maintainers = ["kay0u"] @@ -71,8 +71,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.6.tar.bz2' - sha256 = 'dc60be03fd17e30bafef2a4d4feb2d096aa77a4c6b4f21c985760e537f8401e3' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.7.tar.bz2' + sha256 = 'f532ffc31be5a8374b5e072b86fff8765ec19fda0c8509cee39873081db2c544' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From f43dc34f941f0328ea6519a4d9019eb7b4f68f1b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 12 Sep 2024 16:17:37 +0000 Subject: [PATCH 078/136] Auto-update READMEs --- ALL_README.md | 1 + README.md | 2 +- README_es.md | 4 ++-- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++ README_ru.md | 2 +- README_zh_Hans.md | 2 +- 10 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 README_nl.md diff --git a/ALL_README.md b/ALL_README.md index e3c80d23..df3708bc 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -6,5 +6,6 @@ - [Lire le README en français](README_fr.md) - [Le o README en galego](README_gl.md) - [Baca README dalam bahasa bahasa Indonesia](README_id.md) +- [Lees de README in het Nederlands](README_nl.md) - [Прочитать README на русский](README_ru.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README.md b/README.md index 759443d9..16c56456 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Shipped version:** 29.0.6~ynh1 +**Shipped version:** 29.0.7~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 6b7c9c72..9b89abb8 100644 --- a/README_es.md +++ b/README_es.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión actual:** 29.0.6~ynh1 +**Versión actual:** 29.0.7~ynh1 **Demo:** @@ -42,7 +42,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD ## Información para desarrolladores -Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing +Por favor enviar sus correcciones a la [rama `testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). Para probar la rama `testing`, sigue asÍ: diff --git a/README_eu.md b/README_eu.md index 5f56146e..6fe3a99b 100644 --- a/README_eu.md +++ b/README_eu.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Paketatutako bertsioa:** 29.0.6~ynh1 +**Paketatutako bertsioa:** 29.0.7~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index f325e31b..6dfdf439 100644 --- a/README_fr.md +++ b/README_fr.md @@ -23,7 +23,7 @@ Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateu L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. -**Version incluse :** 29.0.6~ynh1 +**Version incluse :** 29.0.7~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 7caea123..4afd44f6 100644 --- a/README_gl.md +++ b/README_gl.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión proporcionada:** 29.0.6~ynh1 +**Versión proporcionada:** 29.0.7~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index 5cb871a2..a8125924 100644 --- a/README_id.md +++ b/README_id.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versi terkirim:** 29.0.6~ynh1 +**Versi terkirim:** 29.0.7~ynh1 **Demo:** diff --git a/README_nl.md b/README_nl.md new file mode 100644 index 00000000..2de2e2ab --- /dev/null +++ b/README_nl.md @@ -0,0 +1,55 @@ + + +# Nextcloud voor Yunohost + +[![Integratieniveau](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Mate van functioneren](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Onderhoudsstatus](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) + +[![Nextcloud met Yunohost installeren](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Deze README in een andere taal lezen.](./ALL_README.md)* + +> *Met dit pakket kun je Nextcloud snel en eenvoudig op een YunoHost-server installeren.* +> *Als je nog geen YunoHost hebt, lees dan [de installatiehandleiding](https://yunohost.org/install), om te zien hoe je 'm installeert.* + +## Overzicht + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + + +**Geleverde versie:** 29.0.7~ynh1 + +**Demo:** + +## Schermafdrukken + +![Schermafdrukken van Nextcloud](./doc/screenshots/screenshot.png) + +## Documentatie en bronnen + +- Officiele website van de app: +- Officiele gebruikersdocumentatie: +- Officiele beheerdersdocumentatie: +- Upstream app codedepot: +- YunoHost-store: +- Meld een bug: + +## Ontwikkelaarsinformatie + +Stuur je pull request alsjeblieft naar de [`testing`-branch](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Om de `testing`-branch uit te proberen, ga als volgt te werk: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +of +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Verdere informatie over app-packaging:** diff --git a/README_ru.md b/README_ru.md index 782ca443..de39df71 100644 --- a/README_ru.md +++ b/README_ru.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Поставляемая версия:** 29.0.6~ynh1 +**Поставляемая версия:** 29.0.7~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 02dce2c7..d94cc152 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**分发版本:** 29.0.6~ynh1 +**分发版本:** 29.0.7~ynh1 **演示:** From 63cf35deb9c0d728189a4402801d92ccb92900d2 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 18 Sep 2024 16:12:10 +0200 Subject: [PATCH 079/136] Add comment about the cron check for high perf backend --- scripts/change_url | 1 + scripts/config | 1 + scripts/install | 1 + scripts/restore | 1 + scripts/upgrade | 1 + 5 files changed, 5 insertions(+) diff --git a/scripts/change_url b/scripts/change_url index 326594f8..15eaee94 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -79,6 +79,7 @@ then ynh_add_systemd_config --service="${app}-notify-push" count=0 + # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/config b/scripts/config index d756fa9f..d9ae635b 100644 --- a/scripts/config +++ b/scripts/config @@ -139,6 +139,7 @@ set__enable_notify_push() { ynh_add_systemd_config --service="${app}-notify-push" count=0 + # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/install b/scripts/install index a4ef70aa..324381ce 100755 --- a/scripts/install +++ b/scripts/install @@ -297,6 +297,7 @@ ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.* if [ $enable_notify_push -eq 1 ] then count=0 + # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/restore b/scripts/restore index d9544306..63581144 100755 --- a/scripts/restore +++ b/scripts/restore @@ -160,6 +160,7 @@ exec_occ() { if [ $enable_notify_push -eq 1 ] then count=0 + # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/upgrade b/scripts/upgrade index 53131094..657a10c0 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -441,6 +441,7 @@ ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.* if [ $enable_notify_push -eq 1 ] then count=0 + # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 From 7a1274d831eaa1d166effeac66daaebb6726b95a Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 18 Sep 2024 16:17:57 +0200 Subject: [PATCH 080/136] Add extended description of the notify push option --- config_panel.toml | 3 +++ manifest.toml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/config_panel.toml b/config_panel.toml index b583fb4f..c408eadc 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -30,6 +30,9 @@ name = "Nextcloud configuration" ask.en = "Configure the High Performance Backend?" ask.fr = "Configurer le Backend Hautes Performances ?" type = "boolean" + help.en = "Also called 'notify push' and corresponds to a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" + help.fr = "Aussi appelé 'notifications push' et corresponds à un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" + [main.php_fpm_config] name = "PHP-FPM configuration" diff --git a/manifest.toml b/manifest.toml index 286d942b..9525bc9d 100644 --- a/manifest.toml +++ b/manifest.toml @@ -65,6 +65,8 @@ ram.runtime = "512M" ask.fr = "Configurer le Backend Hautes Performances ?" type = "boolean" default = false + help.en = "Also called 'notify push' and corresponds to a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" + help.fr = "Aussi appelé 'notifications push' et corresponds à un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" [resources] From 616b11b7363bf1f170f7e21ee24ba78ebd412c0e Mon Sep 17 00:00:00 2001 From: tomdereub Date: Mon, 30 Sep 2024 09:51:18 +0200 Subject: [PATCH 081/136] Update ADMIN.md (#734) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J'ai sorti High Performance Backend, qui était dans la section Onlyoffice, alors que c'est indépendant. --- doc/ADMIN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 9b19c1b2..4a68583a 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -8,13 +8,13 @@ sudo -u __APP__ php__PHPVERSION__ --define apc.enable_cli=1 __INSTALL_DIR__/occ Alternatively, you may open a 'Nextcloud shell' with `sudo yunohost app shell __APP__`, then run `php occ ...` -### ONLYOFFICE integration +### High Performance Backend -ONLYOFFICE is an online rich text document editor which can be integrated in Nextcloud +High Performance Backend is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about -#### High Performance Backend +### ONLYOFFICE integration -High Performance Backend is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about +ONLYOFFICE is an online rich text document editor which can be integrated in Nextcloud #### With YunoHost App (ARM64 support, better performance) From 978e71f00ae691e2c47a13607bdf470be5266ae4 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Sat, 24 Aug 2024 19:43:16 +0200 Subject: [PATCH 082/136] Add experimental curl tests --- tests.toml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tests.toml b/tests.toml index a7671f20..bd538ce0 100644 --- a/tests.toml +++ b/tests.toml @@ -14,9 +14,32 @@ test_format = 1.0 test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + [default.curl_tests] + #home.path = "/" + home.expect_title = "Login - Nextcloud" + home.auto_test_assets = true + + #dash.path = "/" + dash.logged_on_sso = true + dash.expect_title = "Dashboard - Nextcloud" + + admin.path = "/settings/admin" + admin.logged_on_sso = true + admin.expect_title = "Administration settings - Nextcloud" + + asset.path = "/core/img/logo/logo.svg" + + file.path = "/remote.php/dav/files/__USER__/Readme.md" + file.logged_on_sso = true + file.expect_content = "# Welcome to Nextcloud!" + + caldav.base_url = "https://__DOMAIN__" + caldav.path = "/.well-known/caldav" + caldav.logged_on_sso = true + caldav.expect_content = "This is the WebDAV interface." + [notify_push_test] args.enable_notify_push = "1" test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" - From 7a23074a5c2fd386915806052a23a609997f9da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:58:26 +0200 Subject: [PATCH 083/136] 29.0.8 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 7e35930b..9bbb5d49 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.7~ynh2" +version = "29.0.8~ynh1" maintainers = ["kay0u"] @@ -73,8 +73,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.7.tar.bz2' - sha256 = 'f532ffc31be5a8374b5e072b86fff8765ec19fda0c8509cee39873081db2c544' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' + sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From fa49faa69dfba538770db849bc2f14de8cebed93 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 10 Oct 2024 17:58:31 +0200 Subject: [PATCH 084/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 83bac72e..079d63d6 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Shipped version:** 29.0.7~ynh2 +**Shipped version:** 29.0.8~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 15930ab6..51e82f2c 100644 --- a/README_es.md +++ b/README_es.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión actual:** 29.0.7~ynh2 +**Versión actual:** 29.0.8~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 1207b069..c54ea437 100644 --- a/README_eu.md +++ b/README_eu.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Paketatutako bertsioa:** 29.0.7~ynh2 +**Paketatutako bertsioa:** 29.0.8~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 98a51cf1..9c3a02aa 100644 --- a/README_fr.md +++ b/README_fr.md @@ -23,7 +23,7 @@ Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateu L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. -**Version incluse :** 29.0.7~ynh2 +**Version incluse :** 29.0.8~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index f5b88bf2..3f58552e 100644 --- a/README_gl.md +++ b/README_gl.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versión proporcionada:** 29.0.7~ynh2 +**Versión proporcionada:** 29.0.8~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index 6820e080..ee5cee4b 100644 --- a/README_id.md +++ b/README_id.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Versi terkirim:** 29.0.7~ynh2 +**Versi terkirim:** 29.0.8~ynh1 **Demo:** diff --git a/README_nl.md b/README_nl.md index 5b7ac74e..18d16fbc 100644 --- a/README_nl.md +++ b/README_nl.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Geleverde versie:** 29.0.7~ynh2 +**Geleverde versie:** 29.0.8~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md index 63661d61..587b92aa 100644 --- a/README_ru.md +++ b/README_ru.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**Поставляемая версия:** 29.0.7~ynh2 +**Поставляемая версия:** 29.0.8~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 73eb98d9..2e29df22 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -23,7 +23,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO / user portal (Yun The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -**分发版本:** 29.0.7~ynh2 +**分发版本:** 29.0.8~ynh1 **演示:** From 9cee1eb27c0904c9fe5ac50e75d078c929230d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:45:27 +0200 Subject: [PATCH 085/136] fix linter --- scripts/install | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install b/scripts/install index 324381ce..43455101 100755 --- a/scripts/install +++ b/scripts/install @@ -220,7 +220,7 @@ then ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" - systemctl enable --now ${app}-notify-push-watcher.path + systemctl enable --now --quiet ${app}-notify-push-watcher.path ynh_add_systemd_config --service="${app}-notify-push" fi diff --git a/scripts/upgrade b/scripts/upgrade index 657a10c0..37121476 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -405,7 +405,7 @@ then ynh_add_config --template="watcher.path" --destination="/etc/systemd/system/${app}-notify-push-watcher.path" ynh_add_systemd_config --service="${app}-notify-push-watcher" --template="watcher.service" - systemctl enable --now ${app}-notify-push-watcher.path + systemctl enable --now --quiet ${app}-notify-push-watcher.path ynh_add_systemd_config --service="${app}-notify-push" fi From 12bca635fc471a267370c519b5fe53703e1da957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:55:30 +0200 Subject: [PATCH 086/136] Update remove --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index 5b503421..20a29598 100755 --- a/scripts/remove +++ b/scripts/remove @@ -23,7 +23,7 @@ ynh_remove_fail2ban_config # Remove notify push ynh_remove_systemd_config --service="${app}-notify-push" -ynh_exec_warn_less systemctl disable --now ${app}-notify-push-watcher.path +systemctl disable --now --quiet ${app}-notify-push-watcher.path ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" ynh_remove_systemd_config --service="${app}-notify-push-watcher" From b3ac029daa919d160e0f802bf1e7c25975303fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 14 Oct 2024 08:53:59 +0200 Subject: [PATCH 087/136] Update tests.toml --- tests.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests.toml b/tests.toml index bd538ce0..edbf2ab4 100644 --- a/tests.toml +++ b/tests.toml @@ -8,11 +8,11 @@ test_format = 1.0 # Commits to test upgrade from # ------------------------------- - test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" + #test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" - test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" - test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + #test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + #test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" [default.curl_tests] #home.path = "/" From cc04eb60034cbf633190bd746d35a1d284486bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 25 Oct 2024 12:13:51 +0200 Subject: [PATCH 088/136] Add fr translation --- config_panel.toml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index c408eadc..517f06d9 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -1,30 +1,36 @@ version = "1.0" [main] -name = "Nextcloud configuration" +name.en = "Nextcloud configuration" +name.fr = "Configuration Nextcloud" [main.maintenance] name = "Maintenance" [main.maintenance.maintenance_mode] - ask = "Enable maintenance mode" + ask.en = "Enable maintenance mode" + ask.fr = "Activer le mode maintenance" type = "boolean" default = false [main.maintenance.set_permissions_button] ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" + ask.fr = "Définir des autorisations pour toutes les données (cela peut prendre jusqu'à plusieurs heures)" type = "button" style = "success" [main.addressbook] - name = "Address book configuration" + name.en = "Address book configuration" + name.fr = "Configuration du carnet d'adresses" [main.addressbook.system_addressbook_exposed] - ask = "Should there be a system address book listing all users, accessible by all users?" + ask.en = "Should there be a system address book listing all users, accessible by all users?" + ask.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" type = "boolean" [main.notify_push] - name = "Notify Push configuration" + name.en = "Notify Push configuration" + name.fr = "Configuration de la notification push" [main.notify_push.enable_notify_push] ask.en = "Configure the High Performance Backend?" @@ -35,7 +41,8 @@ name = "Nextcloud configuration" [main.php_fpm_config] - name = "PHP-FPM configuration" + name.en = "PHP-FPM configuration" + name.fr = "Configuration de PHP-FPM" [main.php_fpm_config.fpm_footprint] ask = "Memory footprint" From e8e04de9d777486d88a1620cc230e7cda7d02ec5 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 25 Oct 2024 12:16:01 +0200 Subject: [PATCH 089/136] remove duplicate extension "js" (#742) --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index aabd4471..6b01ab59 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -4,7 +4,7 @@ # only for Nextcloud like below: include mime.types; types { - text/javascript js mjs; + text/javascript mjs; } location ^~ /.well-known { From 8f8a3afc25f15a471afc053a3dbd1f7484829375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 25 Oct 2024 23:16:19 +0200 Subject: [PATCH 090/136] Update config_panel.toml --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index 517f06d9..31ceb80d 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -2,7 +2,7 @@ version = "1.0" [main] name.en = "Nextcloud configuration" -name.fr = "Configuration Nextcloud" +name.fr = "Configuration de Nextcloud" [main.maintenance] name = "Maintenance" From 83dd697b14dd47f8282e1d4231d7e7f7a2418a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:42:13 +0100 Subject: [PATCH 091/136] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 9bbb5d49..acf562e1 100644 --- a/manifest.toml +++ b/manifest.toml @@ -19,7 +19,7 @@ code = "https://github.com/nextcloud/server" cpe = "cpe:2.3:a:nextcloud:nextcloud" [integration] -yunohost = ">= 11.2.27" +yunohost = ">= 11.3.0" architectures = ["amd64", "arm64", "armhf"] multi_instance = true From 960a061e86a37f5ea72875dfd19333038b476e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 09:38:21 +0100 Subject: [PATCH 092/136] fix translations --- config_panel.toml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 31ceb80d..d0afdc14 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -24,20 +24,22 @@ name.fr = "Configuration de Nextcloud" name.fr = "Configuration du carnet d'adresses" [main.addressbook.system_addressbook_exposed] - ask.en = "Should there be a system address book listing all users, accessible by all users?" - ask.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" + ask.en = "Enable address book" + ask.fr = "Activer le carnet d’adresses" type = "boolean" + help.en = "Should there be a system address book listing all users, accessible by all users?" + help.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" [main.notify_push] name.en = "Notify Push configuration" - name.fr = "Configuration de la notification push" + name.fr = "Configuration Notification Push" [main.notify_push.enable_notify_push] - ask.en = "Configure the High Performance Backend?" - ask.fr = "Configurer le Backend Hautes Performances ?" + ask.en = "Enable Notify Push" + ask.fr = "Activer la Notification Push" type = "boolean" - help.en = "Also called 'notify push' and corresponds to a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" - help.fr = "Aussi appelé 'notifications push' et corresponds à un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" + help.en = "Mechanism allowing more instantaneous notifications and reduce server load." + help.fr = "Mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur." [main.php_fpm_config] @@ -45,7 +47,8 @@ name.fr = "Configuration de Nextcloud" name.fr = "Configuration de PHP-FPM" [main.php_fpm_config.fpm_footprint] - ask = "Memory footprint" + ask.en = "Memory footprint" + ask.fr = "Empreinte mémoire" type = "select" choices.low = "Low, <= 20Mb per pool" choices.medium = "Medium, between 20Mb and 40Mb per pool" @@ -61,8 +64,11 @@ name.fr = "Configuration de Nextcloud" help = "Free field to specify exactly the footprint in Mb if you don't want to use one of the three previous values." [main.php_fpm_config.fpm_usage] - ask = "Expected usage" + ask.en = "Expected usage" + ask.fr = "Utilisation prévue" type = "select" choices = ["low", "medium", "high"] default = "low" - help = "low: Personal usage, behind the SSO. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.
medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.
high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding." + help.en = "low: Personal usage, behind the SSO. No RAM footprint when not used, but the impact on the processor can be high if many users are using the service.
medium: Low usage, few people or/and publicly accessible. Low RAM footprint, medium processor footprint when used.
high: High usage, frequently visited website. High RAM footprint, but lower on processor usage and quickly responding." + help.fr = "low : utilisation personnelle, derrière le SSO. Pas d'empreinte RAM lorsqu'il n'est pas utilisé, mais l'impact sur le processeur peut être élevé si de nombreux utilisateurs utilisent le service.
medium : faible utilisation, peu de personnes ou/et accessible au public. Faible empreinte RAM, empreinte processeur moyenne lorsqu'il est utilisé.
high : utilisation élevée, site Web fréquemment visité. Empreinte RAM élevée, mais utilisation du processeur plus faible et réponse rapide." + From ccbdda19e39b2b3392e9c37ad9fe3672a4d391de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:18:12 +0100 Subject: [PATCH 093/136] Update config_panel.toml --- config_panel.toml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index d0afdc14..ca86708c 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -14,10 +14,12 @@ name.fr = "Configuration de Nextcloud" default = false [main.maintenance.set_permissions_button] - ask.en = "Set permissions for all data (Can take up to several hours if users have a lot of data)" - ask.fr = "Définir des autorisations pour toutes les données (cela peut prendre jusqu'à plusieurs heures)" + ask.en = "Reset permissions" + ask.fr = "Redéfinir les autorisations" type = "button" style = "success" + help.en = "This action sets permissions for all data. Beware, this action can take up to several hours if users have a lot of data." + help.fr = "Cette action définit les autorisations pour toutes les données. Attention, cette action peut prendre jusqu'à plusieurs heures si les utilisateurs ont beaucoup de données." [main.addressbook] name.en = "Address book configuration" From c52350016024bd0ab3f3a532680a80a77c9d1ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:28:27 +0100 Subject: [PATCH 094/136] Update config_panel.toml --- config_panel.toml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index ca86708c..a22d2cb1 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -13,7 +13,11 @@ name.fr = "Configuration de Nextcloud" type = "boolean" default = false - [main.maintenance.set_permissions_button] + [main.permissions] + name.en = "Permissions" + name.fr = "Autorisations" + + [main.permissions.set_permissions_button] ask.en = "Reset permissions" ask.fr = "Redéfinir les autorisations" type = "button" From b100f029915d454c05e611d3ab5f914bff1a6793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:41:04 +0100 Subject: [PATCH 095/136] Update manifest.toml --- manifest.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/manifest.toml b/manifest.toml index acf562e1..d27bbbff 100644 --- a/manifest.toml +++ b/manifest.toml @@ -49,8 +49,8 @@ ram.runtime = "512M" default = "visitors" [install.user_home] - ask.en = "Access the users home folder from Nextcloud?" - ask.fr = "Accéder au dossier personnel des utilisateurs depuis Nextcloud ?" + ask.en = "Access the users home folder from Nextcloud" + ask.fr = "Accéder au dossier personnel des utilisateurs depuis Nextcloud" type = "boolean" default = false @@ -61,12 +61,12 @@ ram.runtime = "512M" default = true [install.enable_notify_push] - ask.en = "Configure the High Performance Backend?" - ask.fr = "Configurer le Backend Hautes Performances ?" + ask.en = "Enable Notify Push" + ask.fr = "Activer la Notification Push" type = "boolean" default = false - help.en = "Also called 'notify push' and corresponds to a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" - help.fr = "Aussi appelé 'notifications push' et corresponds à un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" + help.en = "Mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" + help.fr = "Mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" [resources] From bd68f75e17ca8a4cf670d09b2732544976a901af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:46:44 +0100 Subject: [PATCH 096/136] Update manifest.toml --- manifest.toml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/manifest.toml b/manifest.toml index d27bbbff..476a1d76 100644 --- a/manifest.toml +++ b/manifest.toml @@ -55,10 +55,13 @@ ram.runtime = "512M" default = false [install.system_addressbook_exposed] - ask.en = "Should there be a system address book listing all users, accessible by all users?" - ask.fr = "Devrait-il y avoir un carnet d'adresses système listant tous les comptes, accessible par tous les comptes ?" + ask.en = "Enable address book" + ask.fr = "Activer le carnet d’adresses" type = "boolean" default = true + help.en = "Should there be a system address book listing all users, accessible by all users?" + help.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" + [install.enable_notify_push] ask.en = "Enable Notify Push" From c9b8e60b07563612b10a406d18694c39cd10bddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:47:54 +0100 Subject: [PATCH 097/136] Update manifest.toml --- manifest.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 476a1d76..05180f83 100644 --- a/manifest.toml +++ b/manifest.toml @@ -62,7 +62,6 @@ ram.runtime = "512M" help.en = "Should there be a system address book listing all users, accessible by all users?" help.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" - [install.enable_notify_push] ask.en = "Enable Notify Push" ask.fr = "Activer la Notification Push" From 81958af8fd59556b3cf5af6b64dddd7799a33605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:38:55 +0100 Subject: [PATCH 098/136] Update manifest.toml --- manifest.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 05180f83..575945cc 100644 --- a/manifest.toml +++ b/manifest.toml @@ -19,7 +19,7 @@ code = "https://github.com/nextcloud/server" cpe = "cpe:2.3:a:nextcloud:nextcloud" [integration] -yunohost = ">= 11.3.0" +yunohost = ">= 11.2.30" architectures = ["amd64", "arm64", "armhf"] multi_instance = true From e454580485e38e5da82c882482a3fce5a6d45e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:46:34 +0100 Subject: [PATCH 099/136] Update install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 43455101..26020d18 100755 --- a/scripts/install +++ b/scripts/install @@ -308,7 +308,7 @@ then ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" if ! exec_occ notify_push:self-test; then - ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + ynh_print_warn --message="The Notify Push service is still not working properly. Please log in with a user to your NextCloud instance, restart the Notify Push service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." fi fi From 1456e669b2bcfdffca75c80c557d23b353e42b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:47:46 +0100 Subject: [PATCH 100/136] cleaning --- scripts/restore | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 63581144..90c74d5a 100755 --- a/scripts/restore +++ b/scripts/restore @@ -171,7 +171,7 @@ then ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" --action=restart if ! exec_occ notify_push:self-test; then - ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + ynh_print_warn --message="The Notify Push service is still not working properly. Please log in with a user to your NextCloud instance, restart the Notify Push service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." fi fi diff --git a/scripts/upgrade b/scripts/upgrade index 37121476..ab9b0309 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -452,7 +452,7 @@ then ynh_systemd_action --service_name="${app}-notify-push" --action=restart --line_match="Push daemon for Nextcloud clients." --log_path="systemd" --action=restart if ! exec_occ notify_push:self-test; then - ynh_print_warn --message="The High Performance Backend service is still not working properly. Please log in with a user to your NextCloud instance, restart the High Performance Backend service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." + ynh_print_warn --message="The Notify Push service is still not working properly. Please log in with a user to your NextCloud instance, restart the Notify Push service with \"systemctl restart ${app}-notify-push.service\", and run \"sudo -u $app php${phpversion} $install_dir/occ notify_push:self-test\" to verify that everything is green." fi fi From 3195268297bca273a15eac3561aa1af8c48c9484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:48:41 +0100 Subject: [PATCH 101/136] cleaning --- doc/ADMIN.md | 4 ++-- doc/ADMIN_fr.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 4a68583a..2262f3d7 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -8,9 +8,9 @@ sudo -u __APP__ php__PHPVERSION__ --define apc.enable_cli=1 __INSTALL_DIR__/occ Alternatively, you may open a 'Nextcloud shell' with `sudo yunohost app shell __APP__`, then run `php occ ...` -### High Performance Backend +### Notify Push -High Performance Backend is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about +Notify Push is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about ### ONLYOFFICE integration diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index 5b52928a..ed3c619b 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -12,9 +12,9 @@ Ou bien, vous pouvez ouvrir un "shell Nextcloud" avec `sudo yunohost app shell _ ONLYOFFICE est un éditeur de texte enrichi en ligne qui peut s'intégrer dans Nextcloud -#### Backend Hautes Performances +#### Notify Push -Le backend Hautes Performances est une application sur Nextcloud qui devrait accélérer l'instance, plus d'informations ici : https://github.com/nextcloud/notify_push#about +Notify Push est une application sur Nextcloud qui devrait accélérer l'instance, plus d'informations ici : https://github.com/nextcloud/notify_push#about #### Avec l'application YunoHost (support ARM64, meilleures performances) From 278140470a66eb6b79fc58a08f1451c46d8ce682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 12:10:17 +0100 Subject: [PATCH 102/136] add link to the help menu --- doc/ADMIN.md | 4 ---- doc/ADMIN_fr.md | 4 ---- manifest.toml | 4 ++-- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 2262f3d7..8d401d2f 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -8,10 +8,6 @@ sudo -u __APP__ php__PHPVERSION__ --define apc.enable_cli=1 __INSTALL_DIR__/occ Alternatively, you may open a 'Nextcloud shell' with `sudo yunohost app shell __APP__`, then run `php occ ...` -### Notify Push - -Notify Push is an application on Nextcloud that should speed up the instance, more information here: https://github.com/nextcloud/notify_push#about - ### ONLYOFFICE integration ONLYOFFICE is an online rich text document editor which can be integrated in Nextcloud diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index ed3c619b..06b76b12 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -12,10 +12,6 @@ Ou bien, vous pouvez ouvrir un "shell Nextcloud" avec `sudo yunohost app shell _ ONLYOFFICE est un éditeur de texte enrichi en ligne qui peut s'intégrer dans Nextcloud -#### Notify Push - -Notify Push est une application sur Nextcloud qui devrait accélérer l'instance, plus d'informations ici : https://github.com/nextcloud/notify_push#about - #### Avec l'application YunoHost (support ARM64, meilleures performances) Pour de meilleures performances et le support de ARM64 (Raspberry Pi, OLinuXino...), installez l'[app YunoHost OnlyOffice](https://apps.yunohost.org/app/onlyoffice), puis connectez-la à Nextcloud : voir le tutoriel dans la [doc du paquet onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh/blob/master/README_fr.md#configuration-de-onlyoffice-server) diff --git a/manifest.toml b/manifest.toml index 575945cc..fa7717ce 100644 --- a/manifest.toml +++ b/manifest.toml @@ -67,8 +67,8 @@ ram.runtime = "512M" ask.fr = "Activer la Notification Push" type = "boolean" default = false - help.en = "Mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new and adds complexity to the setup)" - help.fr = "Mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle, et augmente la complexité de l'installation)" + help.en = "Notify Push is a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new)" + help.fr = "Notify Push est un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle)" [resources] From 6f868da54a3dd64aca2d342771e9475e6a210273 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:12:37 +0100 Subject: [PATCH 103/136] remove onlyoffice doc (#743) --- doc/ADMIN.md | 15 --------------- doc/ADMIN_fr.md | 15 --------------- 2 files changed, 30 deletions(-) diff --git a/doc/ADMIN.md b/doc/ADMIN.md index 8d401d2f..a48d167d 100644 --- a/doc/ADMIN.md +++ b/doc/ADMIN.md @@ -7,18 +7,3 @@ sudo -u __APP__ php__PHPVERSION__ --define apc.enable_cli=1 __INSTALL_DIR__/occ ``` Alternatively, you may open a 'Nextcloud shell' with `sudo yunohost app shell __APP__`, then run `php occ ...` - -### ONLYOFFICE integration - -ONLYOFFICE is an online rich text document editor which can be integrated in Nextcloud - -#### With YunoHost App (ARM64 support, better performance) - -For better performance and ARM64 support (Raspberry Pi, OLinuXino...), install the [OnlyOffice YunoHost app](https://apps.yunohost.org/app/onlyoffice) and connect it to Nextcloud, see the tutorial in the [doc of onlyoffice_ynh package](https://github.com/YunoHost-Apps/onlyoffice_ynh/blob/master/README_fr.md#configuration-de-onlyoffice-server) - -#### Alternative: With Nextcloud App (no ARM support, lower performance) - -Nextcloud features a direct integration of ONLYOFFICE through a Nextcloud app. -- Install *Community Document Server* application in your Nextcloud. That's the part that runs ONLYOFFICE server. -- Install *ONLYOFFICE* application. That's the client part that will connect to an ONLYOFFICE server. -- Then in Settings -> ONLYOFFICE (`https://__DOMAIN____PATH__/settings/admin/onlyoffice`), if you want to configure which file formats should be opened by ONLYOFFICE. diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md index 06b76b12..ada48ad9 100644 --- a/doc/ADMIN_fr.md +++ b/doc/ADMIN_fr.md @@ -7,18 +7,3 @@ sudo -u __APP__ php__PHPVERSION__ --define apc.enable_cli=1 __INSTALL_DIR__/occ ``` Ou bien, vous pouvez ouvrir un "shell Nextcloud" avec `sudo yunohost app shell __APP__`, puis lancer `php occ ...` - -### Intégration d'ONLYOFFICE - -ONLYOFFICE est un éditeur de texte enrichi en ligne qui peut s'intégrer dans Nextcloud - -#### Avec l'application YunoHost (support ARM64, meilleures performances) - -Pour de meilleures performances et le support de ARM64 (Raspberry Pi, OLinuXino...), installez l'[app YunoHost OnlyOffice](https://apps.yunohost.org/app/onlyoffice), puis connectez-la à Nextcloud : voir le tutoriel dans la [doc du paquet onlyoffice_ynh](https://github.com/YunoHost-Apps/onlyoffice_ynh/blob/master/README_fr.md#configuration-de-onlyoffice-server) - -#### Alternative: avec l'application Nextcloud (pas de support ARM, performances limitées) - -Nextcloud inclut une intégration directe via une application Nextcloud. -- Installez l'application *Community Document Server* dans votre Nextcloud. C'est la partie qui fait tourner un serveur ONLYOFFICE. -- Installez l'application *ONLYOFFICE*. C'est la partie cliente qui va se connecter au serveur ONLYOFFICE. -- Ensuite dans les Paramètres -> ONLYOFFICE (`https://__DOMAIN____PATH__/settings/admin/onlyoffice`), si vous voulez configurer quels formats de fichier s'ouvrent avec ONLYOFFICE. From 96c0aaf02aaccd95dc3ea79dbeeed2ae795300ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:58:01 +0100 Subject: [PATCH 104/136] cleaning --- doc/DESCRIPTION.md | 4 +++- doc/DESCRIPTION_fr.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 67150c8f..9565b929 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -1,5 +1,7 @@ Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. \ No newline at end of file diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index b9229dc0..4300e3f4 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1,5 +1,7 @@ Nextcloud permet de rendre accessible et de synchroniser ses données, fichiers, contacts, agendas entre différents appareils (ordinateurs ou mobiles), ou de les partager avec d'autres personnes (avec ou sans comptes), et propose également des fonctionnalités avancées de communication et de travail collaboratif. Nextcloud dispose de son propre mécanisme d'applications (voir aussi [le store d'apps de Nextcloud](https://apps.nextcloud.com/)) pour disposer des fonctionnalités spécifiques. -Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). +Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO/portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. + +Le catalogue YunoHost dispose de deux suites bureautiques collaboratives, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) et [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), qui peuvent être intégrées à Nextcloud. From 2a296b79fe2fdadfc5041f8c5b57529a1eb45fa4 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 4 Nov 2024 13:58:06 +0100 Subject: [PATCH 105/136] Auto-update READMEs --- README.md | 3 ++- README_es.md | 3 ++- README_eu.md | 3 ++- README_fr.md | 4 +++- README_gl.md | 3 ++- README_id.md | 3 ++- README_nl.md | 3 ++- README_ru.md | 3 ++- README_zh_Hans.md | 3 ++- 9 files changed, 19 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 079d63d6..bc402ccc 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,11 @@ It shall NOT be edited by hand. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Shipped version:** 29.0.8~ynh1 diff --git a/README_es.md b/README_es.md index 51e82f2c..9318cc2b 100644 --- a/README_es.md +++ b/README_es.md @@ -18,10 +18,11 @@ No se debe editar a mano. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versión actual:** 29.0.8~ynh1 diff --git a/README_eu.md b/README_eu.md index c54ea437..75e33e05 100644 --- a/README_eu.md +++ b/README_eu.md @@ -18,10 +18,11 @@ EZ editatu eskuz. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Paketatutako bertsioa:** 29.0.8~ynh1 diff --git a/README_fr.md b/README_fr.md index 9c3a02aa..0f754fee 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,10 +18,12 @@ Il NE doit PAS être modifié à la main. Nextcloud permet de rendre accessible et de synchroniser ses données, fichiers, contacts, agendas entre différents appareils (ordinateurs ou mobiles), ou de les partager avec d'autres personnes (avec ou sans comptes), et propose également des fonctionnalités avancées de communication et de travail collaboratif. Nextcloud dispose de son propre mécanisme d'applications (voir aussi [le store d'apps de Nextcloud](https://apps.nextcloud.com/)) pour disposer des fonctionnalités spécifiques. -Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO / portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). +Dans le cadre de YunoHost, Nextcloud s'intègre avec le SSO/portail utilisateur (les comptes YunoHost sont automatiquements connectés à Nextcloud). L'adresse `/.well-known` sera automatiquement configuré pour la synchronisation CalDAV et CardDAV si aucun autre service tel que Baïkal ne l'utilise déjà. +Le catalogue YunoHost dispose de deux suites bureautiques collaboratives, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) et [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), qui peuvent être intégrées à Nextcloud. + **Version incluse :** 29.0.8~ynh1 diff --git a/README_gl.md b/README_gl.md index 3f58552e..34ebbd96 100644 --- a/README_gl.md +++ b/README_gl.md @@ -18,10 +18,11 @@ NON debe editarse manualmente. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versión proporcionada:** 29.0.8~ynh1 diff --git a/README_id.md b/README_id.md index ee5cee4b..c46f5fe2 100644 --- a/README_id.md +++ b/README_id.md @@ -18,10 +18,11 @@ Ini TIDAK boleh diedit dengan tangan. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versi terkirim:** 29.0.8~ynh1 diff --git a/README_nl.md b/README_nl.md index 18d16fbc..de8dc8d6 100644 --- a/README_nl.md +++ b/README_nl.md @@ -18,10 +18,11 @@ Hij mag NIET handmatig aangepast worden. Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Geleverde versie:** 29.0.8~ynh1 diff --git a/README_ru.md b/README_ru.md index 587b92aa..6593d6c9 100644 --- a/README_ru.md +++ b/README_ru.md @@ -18,10 +18,11 @@ Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Поставляемая версия:** 29.0.8~ynh1 diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 2e29df22..4c5759bf 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -18,10 +18,11 @@ Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. -In the context of YunoHost, Nextcloud integrates with the SSO / user portal (YunoHost accounts are automatically connected to Nextcloud). +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. +The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **分发版本:** 29.0.8~ynh1 From f235e0dc26fa3789100108b49426e0837139a41f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:58:21 +0100 Subject: [PATCH 106/136] Update DESCRIPTION.md --- doc/DESCRIPTION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md index 9565b929..4c681db5 100644 --- a/doc/DESCRIPTION.md +++ b/doc/DESCRIPTION.md @@ -4,4 +4,4 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. \ No newline at end of file +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. \ No newline at end of file From b48322e45024ee9b681f706051938c0d8784b303 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Mon, 4 Nov 2024 13:58:38 +0100 Subject: [PATCH 107/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index bc402ccc..d608f468 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Shipped version:** 29.0.8~ynh1 diff --git a/README_es.md b/README_es.md index 9318cc2b..2cd59a4e 100644 --- a/README_es.md +++ b/README_es.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versión actual:** 29.0.8~ynh1 diff --git a/README_eu.md b/README_eu.md index 75e33e05..4f8f9c6e 100644 --- a/README_eu.md +++ b/README_eu.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Paketatutako bertsioa:** 29.0.8~ynh1 diff --git a/README_gl.md b/README_gl.md index 34ebbd96..ab48ea3f 100644 --- a/README_gl.md +++ b/README_gl.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versión proporcionada:** 29.0.8~ynh1 diff --git a/README_id.md b/README_id.md index c46f5fe2..f06ecd5c 100644 --- a/README_id.md +++ b/README_id.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Versi terkirim:** 29.0.8~ynh1 diff --git a/README_nl.md b/README_nl.md index de8dc8d6..dace8128 100644 --- a/README_nl.md +++ b/README_nl.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Geleverde versie:** 29.0.8~ynh1 diff --git a/README_ru.md b/README_ru.md index 6593d6c9..f0d9f773 100644 --- a/README_ru.md +++ b/README_ru.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **Поставляемая версия:** 29.0.8~ynh1 diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 4c5759bf..17ecba4e 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -22,7 +22,7 @@ In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoH The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. -The Yunohost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. **分发版本:** 29.0.8~ynh1 From 5e88693d4324288a3e5eafe5f387ce02997baaa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:26:04 +0100 Subject: [PATCH 108/136] add some context --- config_panel.toml | 4 +++- manifest.toml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 882fcd40..2c6d3304 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -28,10 +28,12 @@ name.fr = "Configuration de Nextcloud" [main.version] [main.version.version_to_follow] ask.en = "Upgrade channel to use" + ask.fr = "Canal de mise à jour à utiliser" type = "select" choices = ["stable", "oldstable"] default = "stable" - help.en = "Recent major releases contains sometimes some annoying bugs or regressions. Using the oldstable channel during this period can be useful if you need high stability." + help.en = "Stable releases (latest Nextcloud version available) sometimes contain annoying bugs or regressions. Using the oldstable channel (one version behind the latest) during this period can be useful if you need high stability." + help.fr = "Les versions stables (dernière version Nextcloud disponible) contiennent parfois des bugs ou des régressions gênants. Utiliser le canal oldstable (une version en retard sur la dernière) pendant cette période peut être utile si vous avez besoin d'une grande stabilité." [main.addressbook] name.en = "Address book configuration" diff --git a/manifest.toml b/manifest.toml index 685a90bb..4060c3b7 100644 --- a/manifest.toml +++ b/manifest.toml @@ -64,7 +64,9 @@ ram.runtime = "512M" [install.version_to_follow] ask.en = "Upgrade channel to use" - help.en = "Recent major releases contains sometimes some annoying bugs or regressions. Using the oldstable channel during this period can be useful if you need high stability." + ask.fr = "Canal de mise à jour à utiliser" + help.en = "Stable releases (latest Nextcloud version available) sometimes contain annoying bugs or regressions. Using the oldstable channel (one version behind the latest) during this period can be useful if you need high stability." + help.fr = "Les versions stables (dernière version Nextcloud disponible) contiennent parfois des bugs ou des régressions gênants. Utiliser le canal oldstable (une version en retard sur la dernière) pendant cette période peut être utile si vous avez besoin d'une grande stabilité." type = "select" choices = ["stable", "oldstable"] default = "stable" From a67fb0287604aa7852b5e3166b4fb6f5b8bed42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:37:36 +0100 Subject: [PATCH 109/136] Update config_panel.toml --- config_panel.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config_panel.toml b/config_panel.toml index 2c6d3304..bf3c9acf 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -26,6 +26,8 @@ name.fr = "Configuration de Nextcloud" help.fr = "Cette action définit les autorisations pour toutes les données. Attention, cette action peut prendre jusqu'à plusieurs heures si les utilisateurs ont beaucoup de données." [main.version] + name.en = "Upgrade channel" + name.fr = "Canal de mise à jour" [main.version.version_to_follow] ask.en = "Upgrade channel to use" ask.fr = "Canal de mise à jour à utiliser" From 581764a542f22f9db8041b88bdfc171c5227db56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:40:02 +0100 Subject: [PATCH 110/136] Update config_panel.toml --- config_panel.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/config_panel.toml b/config_panel.toml index bf3c9acf..e034a2fd 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -28,6 +28,7 @@ name.fr = "Configuration de Nextcloud" [main.version] name.en = "Upgrade channel" name.fr = "Canal de mise à jour" + [main.version.version_to_follow] ask.en = "Upgrade channel to use" ask.fr = "Canal de mise à jour à utiliser" From 6fdae3408f3d801f085eb1e6c17a2fdffd346875 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 18:01:57 +0100 Subject: [PATCH 111/136] cleaning options (#744) --- manifest.toml | 16 ---------------- scripts/install | 11 ++++++++++- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/manifest.toml b/manifest.toml index fa7717ce..0d380960 100644 --- a/manifest.toml +++ b/manifest.toml @@ -54,22 +54,6 @@ ram.runtime = "512M" type = "boolean" default = false - [install.system_addressbook_exposed] - ask.en = "Enable address book" - ask.fr = "Activer le carnet d’adresses" - type = "boolean" - default = true - help.en = "Should there be a system address book listing all users, accessible by all users?" - help.fr = "Devrait-il y avoir un carnet d’adresses système répertoriant tous les utilisateurs, accessible par tous les utilisateurs ?" - - [install.enable_notify_push] - ask.en = "Enable Notify Push" - ask.fr = "Activer la Notification Push" - type = "boolean" - default = false - help.en = "Notify Push is a mechanism allowing more instantaneous notifications and reduce server load. (However, it is still a bit new)" - help.fr = "Notify Push est un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur. (Cependant, cette fonctionnalité reste relativement nouvelle)" - [resources] [resources.sources] diff --git a/scripts/install b/scripts/install index 26020d18..8af39aee 100755 --- a/scripts/install +++ b/scripts/install @@ -4,10 +4,19 @@ source _common.sh source /usr/share/yunohost/helpers source _ynh_mysql_connect_as.sh -phpflags="--define apc.enable_cli=1" +#================================================= +# INITIALIZE AND STORE SETTINGS +#================================================= +phpflags="--define apc.enable_cli=1" ynh_app_setting_set --app=$app --key=phpflags --value="$phpflags" +enable_notify_push="0" +ynh_app_setting_set --app=$app --key=enable_notify_push --value=0 + +system_addressbook_exposed="0" +ynh_app_setting_set --app=$app --key=system_addressbook_exposed --value=0 + #================================================= # CREATE A MYSQL DATABASE #================================================= From 6adab0f22dd085aa1945aae9772b31418c02e353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Mon, 4 Nov 2024 22:07:19 +0100 Subject: [PATCH 112/136] Update remove --- scripts/remove | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/remove b/scripts/remove index 20a29598..93a0e5f7 100755 --- a/scripts/remove +++ b/scripts/remove @@ -22,10 +22,12 @@ ynh_remove_logrotate ynh_remove_fail2ban_config # Remove notify push -ynh_remove_systemd_config --service="${app}-notify-push" -systemctl disable --now --quiet ${app}-notify-push-watcher.path -ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" -ynh_remove_systemd_config --service="${app}-notify-push-watcher" +if [ $enable_notify_push -eq 1 ]; then + ynh_remove_systemd_config --service="${app}-notify-push" + systemctl disable --now --quiet ${app}-notify-push-watcher.path + ynh_secure_remove --file="/etc/systemd/system/${app}-notify-push-watcher.path" + ynh_remove_systemd_config --service="${app}-notify-push-watcher" +fi # Remove a cron file # TODO: Ensure that cron job is not running (How !?) From f8300384b7308a0f04f6960dd63cbba0ed62000c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 5 Nov 2024 15:32:14 +0100 Subject: [PATCH 113/136] Update tests.toml --- tests.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests.toml b/tests.toml index edbf2ab4..57ee4846 100644 --- a/tests.toml +++ b/tests.toml @@ -9,8 +9,8 @@ test_format = 1.0 # ------------------------------- #test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" - test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" - test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" + #test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" + #test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" #test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" #test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" From 0b374b1151851b606bbb8c5afd56ebbb2530eec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:11:42 +0100 Subject: [PATCH 114/136] Update tests.toml --- tests.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests.toml b/tests.toml index 57ee4846..bd538ce0 100644 --- a/tests.toml +++ b/tests.toml @@ -8,11 +8,11 @@ test_format = 1.0 # Commits to test upgrade from # ------------------------------- - #test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" - #test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" - #test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" - #test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" - #test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" + test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" + test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" + test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" [default.curl_tests] #home.path = "/" From 47fe09a5c2bb0cd8b051b7ffc7df185368b7fc4b Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:18:51 +0100 Subject: [PATCH 115/136] 29.0.9 (#747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Testing (#735) * Update ADMIN.md (#734) J'ai sorti High Performance Backend, qui était dans la section Onlyoffice, alors que c'est indépendant. * Add experimental curl tests * 29.0.8 * Auto-update READMEs * fix linter * Update remove * Update tests.toml * Add fr translation * remove duplicate extension "js" (#742) * Update config_panel.toml * Update manifest.toml * fix translations * Update config_panel.toml * Update config_panel.toml * Update manifest.toml * Update manifest.toml * Update manifest.toml * Update manifest.toml * Update install * cleaning * cleaning * add link to the help menu * remove onlyoffice doc (#743) * cleaning * Auto-update READMEs * Update DESCRIPTION.md * Auto-update READMEs * cleaning options (#744) * Update remove * Update tests.toml * Update tests.toml --------- Co-authored-by: tomdereub Co-authored-by: Alexandre Aubin Co-authored-by: yunohost-bot * Update manifest.toml * Auto-update READMEs --------- Co-authored-by: tomdereub Co-authored-by: Alexandre Aubin Co-authored-by: yunohost-bot --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- manifest.toml | 6 +++--- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d608f468..4a80eb97 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Shipped version:** 29.0.8~ynh1 +**Shipped version:** 29.0.9~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 2cd59a4e..7f5d29a1 100644 --- a/README_es.md +++ b/README_es.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión actual:** 29.0.8~ynh1 +**Versión actual:** 29.0.9~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 4f8f9c6e..952bf791 100644 --- a/README_eu.md +++ b/README_eu.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Paketatutako bertsioa:** 29.0.8~ynh1 +**Paketatutako bertsioa:** 29.0.9~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 0f754fee..962b45f2 100644 --- a/README_fr.md +++ b/README_fr.md @@ -25,7 +25,7 @@ L'adresse `/.well-known` sera automatiquement configuré pour la synchronisatio Le catalogue YunoHost dispose de deux suites bureautiques collaboratives, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) et [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), qui peuvent être intégrées à Nextcloud. -**Version incluse :** 29.0.8~ynh1 +**Version incluse :** 29.0.9~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index ab48ea3f..8aabca61 100644 --- a/README_gl.md +++ b/README_gl.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión proporcionada:** 29.0.8~ynh1 +**Versión proporcionada:** 29.0.9~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index f06ecd5c..6d62855e 100644 --- a/README_id.md +++ b/README_id.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versi terkirim:** 29.0.8~ynh1 +**Versi terkirim:** 29.0.9~ynh1 **Demo:** diff --git a/README_nl.md b/README_nl.md index dace8128..28216f3d 100644 --- a/README_nl.md +++ b/README_nl.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Geleverde versie:** 29.0.8~ynh1 +**Geleverde versie:** 29.0.9~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md index f0d9f773..7a76178e 100644 --- a/README_ru.md +++ b/README_ru.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Поставляемая версия:** 29.0.8~ynh1 +**Поставляемая версия:** 29.0.9~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 17ecba4e..6b1dc244 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**分发版本:** 29.0.8~ynh1 +**分发版本:** 29.0.9~ynh1 **演示:** diff --git a/manifest.toml b/manifest.toml index 0d380960..cefe1995 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.8~ynh1" +version = "29.0.9~ynh1" maintainers = ["kay0u"] @@ -59,8 +59,8 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' - sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.9.tar.bz2' + sha256 = 'f14e8f497c6d6b2b0da5cd0ad116f0c99f720c4eb05e64432fbd86e09cfb4141' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From 8e9d4a16ceb4bbf4972749fce00004932c964eb9 Mon Sep 17 00:00:00 2001 From: grenagit <46225780+grenagit@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:03:31 +0100 Subject: [PATCH 116/136] Update restore --- scripts/restore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/restore b/scripts/restore index 90c74d5a..6b9db07c 100755 --- a/scripts/restore +++ b/scripts/restore @@ -61,7 +61,7 @@ ynh_restore_file --origin_path="/etc/cron.d/$app" ynh_restore_file --origin_path="/var/log/$app" #================================================= -# BACKUP THE LOGROTATE CONFIGURATION +# RESTORE THE LOGROTATE CONFIGURATION #================================================= ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1 From be0378ec16f0ee438ba6d1808b4428f978146ca8 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sun, 17 Nov 2024 08:59:31 +0100 Subject: [PATCH 117/136] 30.0.2 (#729) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update manifest.toml * Auto-update READMEs * add pre upgrade warning for NC 29 * update to PHP8.3 * Auto-update READMEs * Update manifest.toml * Auto-update READMEs * Fix space splitting in phpflags on install (#690) * Auto-update READMEs * Update upgrade * Update manifest.toml * Auto-update READMEs * Fix phpflags (#691) * Fix upgrade: php version is 8.3 starting from 29.x ? (#692) * Update manifest.toml * Auto-update READMEs * Update tests.toml * [autopatch] Do not delete logs on app removal (#697) * [autopatch] Do not delete logs on app removal (#698) Co-authored-by: Yunohost-Bot <> * 29.0.3 * Auto-update READMEs * Update remove * Indent * Fix again upgrade ending with Nextcloud being in PHP 8.2 ? * Auto-update READMEs * Update nginx.conf * Update manifest.toml * Auto-update READMEs * Rework DESCRIPTION.md (#707) * Update DESCRIPTION_fr.md * Auto-update READMEs * Update DESCRIPTION.md * Auto-update READMEs * Update DESCRIPTION_fr.md * Auto-update READMEs --------- Co-authored-by: yunohost-bot * bump all old versions * oupsie * Auto-update READMEs * system_addressbook_exposed is a boolean * Auto-update READMEs * migrate system_addressbook_exposed to boolean, fix upgrade test * another fix for system_addressbook_exposed, update the dav conf accordingly * zblerg, do not modify system_addressbook_exposed config value in the upgrade script * add redis-server as deps * find files before chown them * chown the root folder too * fix find condition * find ... chmod is not faster, at least avoid to chown -R the data_dir in the upgrade script * add a button in the config panel to run chown/chmod on data_dir * we can avoid this chmod too i guess? * only nextcloud is allowed to read the config file * zblerg, the config file doesn't exist before install * wait until nginx has actually remove the nextcloud conf during upgrade before checking the url_handled * create a function for that * fix change-url dav detection * only if domain has changed... * Update scripts/_common.sh * moar sleep * oups * minor typos * Update backup * minor typos * Fix removing ACL permissions on uninstall According to `man setfacl`, for the `--remove` option "[o]nly ACL entries without the perms field are accepted as parameters". * Fix: Add missing `file` argument to `setfacl` * Fix: Use absolute path for removing ACL permissions * Update manifest.toml * Auto-update READMEs * Add notify push option (#417) * add notify_push option * self-test notify_push * fix notify_app * new permission hpb, some fixes * fix the restore script * fix restore² * fix upgrade * fix socket path * Update doc/DISCLAIMER_fr.md * split nginx conf * use official helpers with modified args * Auto-update READMEs * update nginx conf, add new services * add tests * add arch var * tests: enable_notify_push is false by default * fix upgrade * final_path -> install_dir * fix socket nginx path * add notify_push nginx conf before, so the reload in ynh_add_nginx_config load it * fully functional version * readd a removed fix * run cron task after notify push setup * Auto-update READMEs * remove systemd files * add notify push in config panel * add cron again because to make notify push happy * fix indent * enable/disable the notify push path * fix path unit * exec only for nextcloud user * move sock file to /var/run * start notify-push after the watcher * ² * remove warning * cron can sometimes fail when the database is not fully initialized, retries the cron job several times and catch catch the error on failure * oupsie * Apply suggestions from code review Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --------- Co-authored-by: Éric Gaspar <46165813+ericgaspar@users.noreply.github.com> Co-authored-by: yunohost-bot * Remove ~duplicate pre-upgrade message (#723) * Fix notify_push after reboot/restart the service, create the folder /var/run/nextcloud via systemd * Update manifest.toml * Auto-update READMEs * Update backup * 29.0.7 * Auto-update READMEs * 30.0.0 * Auto-update READMEs * Update manifest.toml * Auto-update READMEs * Update tests.toml * Update manifest.toml * Update screenshot.png * cleaning * cleaning * Update tests.toml * Update manifest.toml * Auto-update READMEs * Auto-update READMEs * Update manifest.toml --------- Co-authored-by: yunohost-bot Co-authored-by: OniriCorpe Co-authored-by: lyyn <79758863+lyynd@users.noreply.github.com> Co-authored-by: tituspijean Co-authored-by: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Co-authored-by: YunoHost Bot Co-authored-by: Alexandre Aubin Co-authored-by: Kayou Co-authored-by: Björn Richter <2268851+x3rAx@users.noreply.github.com> Co-authored-by: ^x3ro --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- config_panel.toml | 5 ++--- doc/screenshots/screenshot.png | Bin 79212 -> 303067 bytes manifest.toml | 11 +++++++---- scripts/backup | 7 +++++++ scripts/change_url | 5 ----- scripts/config | 1 - scripts/install | 1 - scripts/restore | 5 ----- scripts/upgrade | 3 --- tests.toml | 10 +++++----- 19 files changed, 30 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 4a80eb97..a3362adb 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Shipped version:** 29.0.9~ynh1 +**Shipped version:** 30.0.2~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 7f5d29a1..2ad07b4c 100644 --- a/README_es.md +++ b/README_es.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión actual:** 29.0.9~ynh1 +**Versión actual:** 30.0.2~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index 952bf791..3497e0f5 100644 --- a/README_eu.md +++ b/README_eu.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Paketatutako bertsioa:** 29.0.9~ynh1 +**Paketatutako bertsioa:** 30.0.2~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index 962b45f2..961b66d7 100644 --- a/README_fr.md +++ b/README_fr.md @@ -25,7 +25,7 @@ L'adresse `/.well-known` sera automatiquement configuré pour la synchronisatio Le catalogue YunoHost dispose de deux suites bureautiques collaboratives, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) et [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), qui peuvent être intégrées à Nextcloud. -**Version incluse :** 29.0.9~ynh1 +**Version incluse :** 30.0.2~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 8aabca61..3df812e9 100644 --- a/README_gl.md +++ b/README_gl.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión proporcionada:** 29.0.9~ynh1 +**Versión proporcionada:** 30.0.2~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index 6d62855e..1ab90c21 100644 --- a/README_id.md +++ b/README_id.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versi terkirim:** 29.0.9~ynh1 +**Versi terkirim:** 30.0.2~ynh1 **Demo:** diff --git a/README_nl.md b/README_nl.md index 28216f3d..3b30af19 100644 --- a/README_nl.md +++ b/README_nl.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Geleverde versie:** 29.0.9~ynh1 +**Geleverde versie:** 30.0.2~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md index 7a76178e..ad911990 100644 --- a/README_ru.md +++ b/README_ru.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Поставляемая версия:** 29.0.9~ynh1 +**Поставляемая версия:** 30.0.2~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 6b1dc244..66d266c6 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -24,7 +24,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**分发版本:** 29.0.9~ynh1 +**分发版本:** 30.0.2~ynh1 **演示:** diff --git a/config_panel.toml b/config_panel.toml index a22d2cb1..dfbf1c41 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -44,9 +44,8 @@ name.fr = "Configuration de Nextcloud" ask.en = "Enable Notify Push" ask.fr = "Activer la Notification Push" type = "boolean" - help.en = "Mechanism allowing more instantaneous notifications and reduce server load." - help.fr = "Mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur." - + help.en = "Notify Push is a mechanism allowing more instantaneous notifications and reduce server load." + help.fr = "Notify Push est un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur." [main.php_fpm_config] name.en = "PHP-FPM configuration" diff --git a/doc/screenshots/screenshot.png b/doc/screenshots/screenshot.png index 1cce4ec675b6b27d7fbb03a87d6f2bddde50ba59..1e0e871764ecc5369c744bafac62149413189cba 100644 GIT binary patch literal 303067 zcmafZb9^Pu)^0L!CicX(ZQHhO?POxxwk9?ww(U%8+xE@-p7Wja>E8QC_phs-wN@?n z?y4OoFDnKMjR_3|1OzJ~F02Ry1X=?G^erC}{I8kc58YoAO%}@PPUo01AJE-Yg+)PD-Yq{ayh@A|C**F#Q&Sb$%=X z$j;FOpM{o%mY$Fo8lT(I*pyRISoELFUn3qub0;TzPC7al7Z+L=CR#g3Gdczi4h}kc zMmk1DnlB0(fSaw8fh&zIfaos~|BxYU0x)v4uy?Ysv&H{Qrh%cIvl9;?;TMkoPvK4$ zrvH|13;3t`Uyh*r3!!76rKkJP}DtZRae|qL`>aU70HgGcd|Iz=I z*ZACD95OPT;uZiWJ4d&_r~Z-bN+u5f82w{tZSi-O}+IW z{I^+O;{JgG>`a|p3>-}a%)Y|RLnvTsYVj2!H+=cO@)w^GpYf|S{}JPVvACF_wb{(%@hB{DaT zP#n0IB;qxw)?i>WgXPm*{8~Ml2q+>5r+>m(DW}{>5fGWi&OBdNvkY9&D&i{Q=gx&< z$Iu(>yDv2(XOV+JCdbbqVv0zT7;;{Kr4)I-XVm#Ly; zBf?doswB7swk1hZ6L^xI&FuO2x)kA7I}YqQCGp8D5N=b{{Df|s?PC9kNQz8GPEOgK zG?9`#=RJ_h9C_<)@8`YNb?ODZ+BHnJD7s=8Zyx7ukEAE3!rX&@-LV#F*j z7?JNMvXm$zBPkM=8y!|;ef?~zcDHmY&|E(bDKhJGJr6msd0JtNj3MfK;sjqs);>6W z4idufK=vxHYJvY{1TtBDqUniF%bI(r5M@z|H$rMFQ@FK{vXVdT3}Q1jpFRJ;;pRKs z>N(GHcHZZkd8z&k{zuO&-*fB|^y{SoWiPG)00M&R|LX!yqJqN$0>TH95Ef8&%{O#gD839&}w&8q_v>$!ITu6qUES z#oz2ug{k}e41@2rCvrL44}}Ml;rN4(ghHe?-S297OIW=6L@K+6*asPq%>Sa4;Y1e#sVn5Xr^* zJE>B-LuYGq>J9s5!s5+2y>as9l=QIh(Tz~u?99g$EdyVEb3Mvk#hKH`%{REJ)%7sQ z5KRd~gH9#}lE{q@Ys^Niv5WDS>d_97M%e%Lu?8R4>Mka-AEXva7(7z!rUHGCD3=vX zc}jqW`@F%{PUx=9(t51uWer0>?Vfau^3xXIn%bKl*MO1nk9&u8#XWjR4J>k>t9^bW z+s~494jygq6mFJIx*-On#KqEuBXSKZA|YY@%3M8-^ALhxif%2er`|%t21Kh|Rvs?(moY{}LLDqVti53DqyevB(Pwtdt&@y?N(YRK2#Bb0SPUjLJ4Ax0Zn9=zZm#bgmB(#x%*JEv zK7FG1Wu0zUmEUV{ow_$IyxJtJcKzk^jryh7!!kG_H1()#mJWK|Tg$(!%D}FDD-Od| z`3X#(rvi>iR8r2Z9rvSwkUQPa%nHcFSI(n+XnCdCwW3*Ibd!J4ij@}@wyE{KG_y#a zcD4kc@)}P88%|ll0UyoD6>N{qB(nG@%7{J~(nIh2LdU-7!bVv&92>7isARcsq$~oe zMCy(_ITO#&N|%;RHdajnJU5%N!iBTppV#*BT~*Y`&zS3|mAwp@x8`J&*j!JdeHLAw z^Y9AM#px;7>W+r$uK7)z_@AY^Q>QTs4NVL0TK5(8dLePKSU!N?i6UtIz&NM zKUrQxmvk$SvFz+HFfQDe6Bp()@bdKkY)fmHNdoiA_m_o~03&ZfGMpfakVGmlJG$y7 zi$?^i^3Ps-(0+>&74B=DjENJ|hn?9v;Zfz$eD1aX%o#6bJRI_Kyp zz4XJJVT%>3mu&mYxhkKhJueZk{SdXX!!T-8Sk=&|jt>o?gWG|775 zllu3Bm2l4(cT;mz<0295`$Hf0OV#^w5p7=r+k0fo+;8z$De0^lWI1Os>Il-SR#th% zF>reQN~kb0mlE=bvKRsmgns!du3a#ag5r#TpPO+p*mX2oG8P7gUN|xo-xd0AJiDpR zv)*2h7oXoZFAkHcfKqJnnTyIk>kMe3S1_3&6*rhQFFg13E@gt3+|%DO19^rZ8bo9Q zB~j3gm3}9yT1qO+Pg&`s<&pcBkdBR4JTKo97INb%icD;={N_d1hJn`<2?5q=$WA2A zAsOSy6)DS0QzovB&3I}X9=?fO1QSSj7y}ho{3SnFrSUGpvzVC^A%8YrJ;Le zi+>`819ER&_KFuVBIBwwn?oE3ixxdL#ebi)i-kRcfDv^#G6FOaAQ^jPPvk1PVmIqK zzll(N%+gsOhM%p5ylA;*-$CkOS8~tIyo0H`55SPu;`q+WZH&M-&wz$8cB)?fkX1p7 zt~@8NvwJW>$49PsAl-jTvAw(l4yMrm=DZszmew?8$<6E+!7qJt>MCch*w@f_CJ2m` z(}6_dI8p|BeDWu>dI~y5K}kd==|kSle*Su8__gY#WL11< zqNuR5!g~QGPtJ(8PJ)0!E}$9OXI1^pYS&0bx5lELttNQX%m(#R8l&SEmcz#ArV{vX zg&>ys-f~p%yN-l@S4fQMfOWt?nx5EwE zXkJG)T#q}GR*zPc2L9s#0UUf9uQ&#lfO!c0%Qe2C3K;$jV89<^HLj! zdB~4~nf?lrg0LYDdVOUmg=Dc&Ht$=Ps+Lm?PHP@1O@jz57%GJM2!77`#QnmEej_{FAuFDB5_Lw*svzO~?F8kKSo`-VK9ZjO z5S(`Ak5Az4ozp z3Y|6GzZ61I1JnZmDxk`N!3CO`f+cYGG@)Q*kih$1oL2|KM_3q2AuEKjQ9sfE?A+5x z7(Mz%LDM3?;LKxdeS2_Vv=V_cekvq--Hy1uGLdLr2_!^D9#l91EcNX zQLtj9l95cOM%_9p%PN78Ml=ewf#}c$vw@a7wviy%s)E=mgP23$%*1MOxCz<}h67z_ zgc6-8!jJ@Iya8Q@FAt|k`Q?W4%0k>$4hEr0Vb3M%!qk>9W#A-|veDaE_LdM33XpL^ z*3d%M%s+!`Sqw>xNG7EcO`E`p8meyS!nQ{t1o6YMl<1yYB>A-(`i%1z7N$u;e`BD^ z4-~-^lE@bfPoHvcu; zm?R0ydrqNot}$bh&Ejtk%F2ZJWh5O))$8+hSEF#Xfywj66iF;p75Pb2#H;d9XWJ20ItZVm-mMzkVy~236$SqX7 zYQ#wNV1EL|6Ey>VJJ*MvlP>(oB$ve|jTHZZe9BT)QJwfBfsk~&)IfO8MBY=_=zTB@ z%Mm8nCoEj(&vZ$a^*)`U<`7>E&zObYhRA!rDXCmqudoj%4i(YLDwq25%w%55>XLV{ z&C<_T8jaQ)ux!0Mq>heglXH@~NMC&7v(4V1XpL`_nR zu}3-fzyO!^@UNd#kAX_8L^m+ChS46l5+tnKwa?#Zj~JBKu-{m} zg$33JTXXOT0d%Myc|V{FTVYa_+c}1$^)cubVRiFOQ8_HPe39>s0%8YyqaY=SHO>=D zmwIW04GC)RB2W;q2NA2a9Igp;e(Qz^?%+tCxrz2z3YU6-{Q^~BCttC=D)-+S+MQ(t zR@9~Dhd;FbLF;VD&qR#+L@DxqVvVUr8Gm^adTdX?n$j~>00o-}n`o3(!;Zjn2#hP~ z+YCg2Rs$LmMNKNLaD#0*24TrvrO5$VzFw6tl2k{bYp6_xcu!5XJ}YUgc+CoclcQE} zAxpo(UmW&5^aROAN;8c=DzE#K`Ar2zz|i;>Bh8)N2uQ>ZkAngV zaqvH+mNndMZFR+S#SpwkMkLiZt>Uh3i2nh4Rf~C9t8T0E)@=|9nHNhAy<;?+1jNUR znO2u?Yi*)H(Ax@`A1vO!q+b9mKmbIcZ-ds(Noa(;`=~CfdzQ*?_^c~ZJGm`F;CHRC z3xbHWU#n075jf~C!@32IQLRD{c1uc0HKxhBVhtm!4-AhQVjegj+7E#7lmMX5#gEOzkwVr(o%udoS9E7bI_PJXnrSv?>pNvs_cS4IR}-ukNdT+IYj^sHYqeZQb@sG@51T%zP?9Z;Z_3U>j<6_NUh0q zX%8{1nK2)e-b^8N+&=+{>NzbqjcEGz?6vBM)=OeVOC!2k(z`UbO+_uGaD+p1)ztgh zX1d!!jr&VQqS%P>mwPl!8BY@&c!rLn5wM_ycVf7?EZp-8Bcqevv%2ZaOr-QIrwPb4 z3c>*pA!qd*d|a;>yti{&#}WO1@BYF9bM=+}Zi zp<}GDxvJI`AQnaf4D8$>o#+e`R1VANF(xzN-nc$5sLIqNGTfn&S!Pw%h6pI=ptZB| z9|d){5Y#8(B9IK7a>_~mnpBdbWB41>;SIs$kqC;Yb_Q<&Fc!Y0vaRYq@$r4E4u={F zn7!ZhIQR7%SFE8!1*DS>D_`c>jUzkB_tZW;Q?+pIgyu?@ei4@!Xu&8tsacqZ0#(mP zMqn1FW0EZ?(kZN0U~!L#J405=ES(~Mu~J`T2}0f1CxOZ*9>k2k$8J<_{^PoJPjgng!Cbn z^jU;!UATvzUV8h_=w`QVKz={#x)+{g-w(jP9l@KmQ^K-LHx#O%ikg4-W0_^|P~2bFvPkUc_69oqnoAQJZF|zkyY# zg_sK5<3`TF3T8Y@$rnO-=?gV%%#Q7MV+2nqZ>4QoDTCp9c45&B?ps;}c5uZ+Li)a? zigK*e^K)+2^Q7Rhc9Rw${#^UgRMOEO_30k3xAtV$3YcIQq*UPPyR11mG^h{&>xV%8 z^=x}0)6ctVJMh+0Y0Q&bNi_BTU2nToZS@+n7(vjQe%5cehJ^}EC~9-XJPcM{{@Wpf zL&5F&8E0jf&B0_rE`tnhMsL_`7F}Ike#C3GS5}Hz;*}!@AyZ>`$G1t$Oyp4PmXa9w zc4w)BiF99rf~H?<_J;}F8IO?h`u@O{!N~y8?-G-VOT!SPXJkqzCYGE+Gw#%vr+sc{ z=y!7`9J9;RR309X@65S}yT-d$E^_=j!pT5ZLAHkjaq2=*6RDc9#4R6E^!<_*7(Gma z7@Xp6iI-M*?eA)ZztNbJqfq@r!;ZsI@^M8`qFUW9xm>Q{JMv(fXSjOyikl%$l06B>Y*6La(F`U@4ep0BN!ef_$F zVMWv&Ycl~$iru_ga{9kpm|89_;b(tI0vt&EQu6z(@)nIlVUl37SNQFBwyk|d(X0T} zmuH8AT4MBCo zt2zlg4*}h{9yMn{iz6;~@^&<2o?8K+w0Rx*0erfzY|ush?a#<1V~`4vH1|Lb)j8W9%HfGRNF)IR#dsmwpFCV)|ExRJs40l@?CN{@k?k z($l=G84Lb)JbCsiw}#89Bp887IyltlV+nFBs)9*Y0lQPUX=RM!yQ9Y85cLdYC}vLAX$7DgsuFX7#vr;G^SL zFDojYlv`C+Jnu8qeHlFKMHLDgItZn!NB3&GF&Z=VhM;xu>*!aHZ>#9W?>Q7%k11Mh z?VrYNvL~}Q3G>? ztVp~y>&os;>HMW_AzFA|VMzv!CmSm)6jcpD$O#3S6rE@mM^?MNw{rWPudB^FgIpBz za^Xa@kd~vINlO&|gU4*7X9V+YnRwZ+I*j`z!l510-^|l(QwUNr_^USsmCuR|y)cY` zhcE)Z3l*qu?e%R=!rj|cEL=);6Z(J-S-b}O(4)ss}G6uA6X-s92$@BVSj8R=L5gqmJ2N)e=ZA)~(<3{=v z_6Hg%i`L}Za@12o(GYk(;?(Lej2IH-7t{KI?Cz@G8v?R*AWibl5rdVu8Qh+l3wPh= z$AM|@;K*GYF{MJE0mhmbDSWsT<-2;oUBzB|3|e=%hqom``JaG zf$!_UU}sB`*@WgRV&6$1g-ltBpFSucW;T|k1PmNm2XgJQrrIW3!udfnWI+7Cj~)MN z$fsr1hRvjK?t$+7dBT9*d59+5-7!_Mb*tAFO0?m_Ooms>qcnRpJ+|(7nzwniHw)MM z5>~Fg*$Ipvu!0@WCe!DeTIYWepFR3 zd-b$yXFo8{HoJfq*Mue(E37xrZW+KY(1!p8QWWgp7gMT+RS$&L{mX zsi`>P_o5OtsFO6y?cO;!lMJ`t&j&ddz0WPK`eos1i%7wtPRiX#hz3wH&|T9)wC8g= z)Z5D_7HXi0@gwq#xJGF!>NL266!zh#)`t<7T)yj?yWzqSoZoIb2P_~L444Jim%`Mb zjq8W!&G5z+n8*mhJx#>t@{m^1dLbuY?l+&$`=k`E1@c)SHHbDd_s775g-DBV%)H;^ zO%G-fMA%^-`PK(T)Hb3=ShvmE{RkTgCDM~%ps{qSomCcafrPIVf6Qj1i@9-#k%N;7 zE`M@0m$P>*Bg8qvDM3m=fpWU12YXJrVW1KpnZ?kMU5(LUj|5`hfmFNPUB5+0S(HrG zt~SnzQ)SjaqFK*)!jOGzfmh@ZRagS-9cFU{2}R*fvGI6a<=|EVe@@1Y%Z}c7 z9e{X%Ane%pH`Thc3o5={6$GR{Hj%M^1#Vg!+0YVWyJ_K)vF3pr_7~uXna@j?>*2UW zyYmgGaA1V3H{=LwKVtJAMrF;gLOb|V>{3Ox&)34;WlKSvY(R->8C+t*IK>hQU+V=! zRomr{;Uu}7T82(C;5dfDLLlw_?6yl$Db@+27@jF$kBdne_>NGfwC0P<6Mg|jmOq@< zo2Vd-tCpl~_0SWq)|04gZy8E4Yw4moToBZd+8>uNk35f-nP@x}%Hd^REx3BQ<7{9( zq0`iEv>cc0y1K3Y5udJPRh_)aa#rrxlyT$=df7zq%W+;AxdpXRt=M!ZNY$7*k|a=n zdXGcS`@xzvggkus;w4oS|15+gt2@Mx#+Gq1Z^oDp1JV7!*i#`2QRcTsyH;dL(L=#n z#77ii?x*^B)1VYhhTbzo*XifO`v6T~0cvss3vWMw9<#Ib{&OeWBYS`0u+4tCK}8%Z zd@1f6iYQuHeb4CiqWj0t#lZcidUukKME6*M=4oYq zBIpn@RR4jj-i1A3w5YgGU0?G*+zOr29v?OAR*PPa>Dy@JN>C)QAliFm~-e9}vI6`-db&?sXxIu3=+TO7yJb-S7Q5K!K7 z9z>g&^26vbinvZZP&^QiLs`oBdxtea>@AKWHDQbLSwFQ04~ayKaY4BoXkzJ(MvO#N zOis2BHo3du+jzvE%pcwE0b!paCO5^18Sey4dWoU)- z`Q@={?-$R{!`W4IAaG|1@NSH8JqN9=s7qi#0k;#!qm&)9?n+ytD*Jh=>k|De2)8#NqgCy@n5Mlkioj~U8maWtoO zqCK&k`EkvCOh^_6vUN5o4b*{tU{N)N`ce*xSTlJL=DbcOwSU$$Icz;JU5Q(thIt~i zhAz5GyFoY&Rno^-efX9K>F(aXuiX-nS9*TEvKx50Ff*wN;gPcztiiy_f ze7$`69{z~;6Nn6_o{0iHk(N&3T7|hvBfC~O9p$1NQoH<)4Vsrg^?H6Lo%ZGyAZLg< z9Y^QzG5-jdKZl<~7Jh2%PF5kUn~UDR$@aDea0;&P7=?mwYZ! z$o9N5;C=7sd5X)Gfzj20Llg-Y;YLO*BRm$(ESfH`ojL+HyLwSX%+qH2boKs0_Hk#M z?Qu-fdbRv`Cv^>;MNn>cAr9k3D>Gsj9^ork2)EkJWu-CIN6@5bmWwTsw5CakFI(%E zPja?bSM38tWHH%srFi2!XCL1qEMHn#-k_-ir|oMNG)cd6Dc9kz&hDA9++Nq7L6+Q* zfVN+QbLemhh|pM3Gc+Wf&}vNcGqbMnrT8-lgoJ=D`G^2}m4~DyH*!6RbGY@4s~!;u zOo#wRP?|U(f;cGU=O zt7_jjnEc$Q@!ZuS%Tw@^qHB#Sr{hT=;=N&!<$RU&{yg7(>h-}HT%>D5O=l&tZ!D8P zUwOeHm+oLKA)ibn-vnCG%ppC+df<3|y=w($T$!v)@d~?qd&9Ktyfn!q%Y5%_y1DTB zIr!KvAe)(yMpDf-OV$G1zFEe95 zKN5OcZSocqH>Jm`C}j{vI2;07g|Zldyj=Q88j<2sclV4Qirp;kpvbRccvz}w&&nz; zwNIt`j2j}hX&*r*g>tnn=NatgM`q>vx{!K1c9Q?AUR{l-};U1DR z`L?ARdnkT@?q>e-)Bn=@!RU#1;>iHf3U()?go3~TN{QTlPnQd@VIfvC>x=fnKpH|6l?ZlvFIYL`7I+>- z>ZrLm;ld{DA-WrZ{iYa)9K94nfqdfniS9itnL@XIfg)~)q)r}h zbv#3Q1$7!<(wbQQhUx7%d1%RflKCN(4KZbEsNuTCdU?f{jx|{d3Vg9ahpKE*MH_zZ z>toRg+cGOm5_{HbZj#W;2OwzRjQLN@UD{ z6GRXCp8o84YWtU-HivZ^c;p2cA#Oej(Q1}mzP!=ER_aw5JAI^@*KyOvRYTTQ>Crgn z-e^Ga^o*9FDsA-6vPTL|v(dI5{=7QYw=xT0&;aC=KS^OU>&We)o8HGLro>D(eurqh zVW)Ot+DrxtHJu^1gRCcgm^sru9vjzilkA6NXHAQ?nV)HoOguPKY6@F9a*x-?)t{j_ zjq90mopySH@j)G`L}JgX345P?+!&RRB?Fu!Le}EnfvDj0U~{-F^<>>HI}@coM8D0QJj}g0}sARA6bC!&CV0 z2A&cT`5jFN3$?8wJubg680`G{GBfA2_jbt5mOau7Z+8wq3EMX9shyi^n$T!*?#OUnlZVJ#^?haj{nCF_WId4|6=4q4~YIJ~)_)(La!3f$bjwz(Y9Ofc^*^Y?p_i0@4YB66$;6IxDYV z;3QShRE54-E^C>=^;anndWHIqlIFTPZFCg|XG1cjjnxmS%2vD1|Y0+Kx<{T&I27&Zq0t zXTwI^_AE42T17eG`+|O`>%cmJd(6Ke)YD?rH*j(-j=m$ADepT5G0@XP>eJAaa&9zj z!u>(kQ&usJp!w)V+>s}B^99uZ!Ft$q`~Gp$o9}9fgsYGrAj;BNi8{7sLGu(StlpYs zKfBDg{T_ld9KM)*qtCEaLFbvO)cIjV`?;`etx()wH!bEAR6`BWwi^oxHa9&gvDqB2J*8;-bX}avR~Sa?N2Ygf`ni7S@P_#6cuWJI zAC)luBJIc*0SDR4LZ4UCKZvUb(r5$s{9zVtq?n-mji5s51l07;p?#hcJHcTw`_6FR z^90^U=mBQJYUGgO+_Jp-0D=5MfTc}E8JIAlGke^U1=azF>mh}<&*JY2W{td;19s2( zoWW|l){K0(rR=Px)JdHPsmOa0`S}_+NAStlUNP|&ZjpxOJcG%KA8WN+yxG!I`lsWD z?wFeDsae8ilxnvtHT)bE^gn?t0|y3N>>>zK#;yW#KGUo&bcDTF2V~Ga!@;MJf-%Rc zi4m=myv#%e^xD0tNi^L8BAsT|6vaxbhYPHEbOf@a7n7$^T+bSAA4(deb67y=jLfsR z!%TE=QY#7@3ZwnU4C-(vXs-S!eLp^8t(UD|bGgh)ebK-;=QkF_R;GuBner_Z)S>Jf zf?J2s+YML(R@=B|)@$C=Y?T4Qq~5D`q1$@=I;aO=dJ-$1M2bjf5>R&Y;kjqp&f>$V zwIs8&yca7%PWU%~F1uHK913|p)STB~>LZf6`Xg=E>@jG6q=-G=?6WBj|1nT*zSo1l z8M>7a9(+y zg9jz5uaN8dBKeWE7DH3lO}DNQk%TB#RpgIvm_2`}$*ROeD!s-`dc~rp+8QK-c=v*< z8AWa&tMlwy7*QMC#*F z!2Bj|FRM&01{lJ?9fll5fmZX&!|U>WU_jd3-gUCgAwX{R23RbC_~nA~=B>m6wWpBr z&1l;y(`8-=`*l)h*qG*fj#dx4k2~xujuSrE*5&sUhYyn`p;7-7?H1k6lNQs_AP|av zQbLJ@m_(|N7knEpiP{^`YnP}imD&MsIIkhzJs|;l^4em{3QJ#cMQt`CFU3M$(zI`U zuWJxX7K%iTpnziL>)cPyU;y1S@<+b}JF=L$Ziv`VZ4ljWZsdbQZRd!bD=`E9PX7G*8Scf?*k<$FDcRKm zjn>oRu9R!3%@2?BPFTLTyBTbk$?7B5cacu_**1AUJKcATuGiQ6*eZw7Sb%YW?MBNG zE48hak%5Pwh0Io^Eh=sx%5gg29bJD$pkn`Row)HWe4=?zZWQjW` z7r=~L@pZ%HI~10Pd2T=qwhQ-W$C=#trZ?^5W}QD>wga`9*O`~+V|p7whK`4i%5IJA z&5owIzmPIiZzxjiNMY%iF}eAfvV&p#5q-=sByc#O0RUR%$L@*lxP`mw*i(J6lO@)f z<$_yJh4;Ev&91LXb-8Ybw)ydnQ*XxM+mvN9lfk}4&C&xaWqdl_xw z(ct8|0GT&JV(%)``>e_~BXFLe`BdH9>wqMT|i1 zGbtv<(~c0SL+WK_7U#!iE;oX}0B7NcmiZshmCBRUWh}?`I2BVExn3FJ>=x@ppB!Tv6mN@T|B^Y0dEtSEgAVi4yc9qZf84~>mbeK8Mb?tH1>g~8H}g@2&W96BjA51wcFivS@Ua{o#WerxQl|gwfF%G4q;9${w+A+i}#HDq-W8ZgqMFJl)CD(~GgllALixmFQ8S zj%FdIhn~4e^1R;5=Ws7RcHkQk+y6mv3cZgJ{7wFw?E8$)+WmNhgEAr#)}p!|2XAAA zB;^=-mp7tXrWdpvEo>@lOLkVH<@V#JtN)aaClPZ!oXAD{DcFlczC@mIgB8h8NqRzZNcW*CcL;5AHzFTLeE)=YFnPc43Dr0>l|-65rdoZhH}h zL`Mw*o`Ge@RHK%x>2@A%>#LMJ8)x;gJpx*U^myUdkxY1_$(ZZa2dlTwX~&Xux>V=2 zK^=dpPT;QYU%z0LN}M$dH~nDJyMDE{n_Bw<$gbT18uh zUU`$WKUW-C)pOL;obr<(HJN@oIuuq&genja0c-qH1LcEO08y&r<$J#Pp?wwN;d)hy zeq5c=JyzXFBumx$k!sz;2#*q=L@zr0_~5wL_Gq@D^!U~PFm&W4EO4sp*JrQ-^?3wLZ8)N3d3CSH}wyJBO*%}7%agRS&JZ{j#M5jc# z@7B817Z^sd5`inFrxktp-9RCgyCeGoDyw-~KJr)WCI4)OiZdr8j=3v1by%!)qOg2F zlr)%MHhp)&Nhrcje@bk-(x?f|XtDzhWkKMty_zy%Xu|XY!GR*+5QOdAM1ZaosDd~J z9)X6`7Ivy|voc8r(n|w;gN7#=M#FS!5dzxSE|4nyG0GBTL9DcSlv=u_$QlcA0`HZ9 z31gWD&UZ$HD4K;QafWWXiY=-f_TWeZ`3}aUrRfFqp8Y1ey*8gWwxU{t@s3i%9p-jO zgs@>lcGou5i}(FyYWH{8##MLP`>Ieg7=M{)VglMuy)mJh$bNrC2?6Q$8A~Lt2!yZ@ zRQnN5XLZU&^cbjmY00-P<17@Sp_>a{&2&tMZZ+C=KM5w*T`4?Is^ePTBVh+5g&V@w z0HnBpg+Z9X11RQ}(lK$x2ws^I631ifvmZ*skN0GVhNu=s9p+Jw(Lz8|B7ZVsci}gp z`VQnwCIithmC&pL75CIOd}R>v-awcey;pJ%MB8N2~a6B%L!_G3hHg14aBLPXVf54A@dLE=V4uq~pU zZtwYPKVOkkEdb=f&*>MUsPg&T?`sj6hz%3S3Qf%K? zp7bBEY4=)P&U9MR)pj52s0EgSmbSCp9;M5XMr%HT|HNnfF*v(!#}lJSL5Rn{APPE& zP$yhryq}7=lPHQk%RN$yVmba4O6apb9w_tWTo4kPuH~ za9?X}nI_8(a}%5z?-0qlMh=h&nX<;0ez~7DolS&HfQ^&M#$WW9H zocfBPwfFBnenhb8t|aj^Wy&U)6NW?&2*VWsA_h~?mpu7clMY&ac!yy>J%PxQ6;Y5Z z`Tnrw{_ydQiXniB?l_P;Tr_Ks3Fg<>n34TIG<^eO9njKkqc&>H#R-P*o3rQkCdm}vyxBgGhhR}B7} z6s;&7SH4rQu{L}$!5==E3q)Laz0WC0iKN_0hyD;=%6# zB}C(NQi{O9DgnbXsU-UY(8GBQzm=fxjToN(+uoc3URaIsZf0DMpXycZUA?QD)5&-D zD_O7jpBqk_jhW!dn9Q9(w20q@N$tw_p|S6*=$Ir#IJHYylnwHQ)l>2$ho;w{aM>Jz zaHFmr2M35MI`I-%#)8#LV+J!2IZ74BD8o;soMMvtmTE3ks=2}9!EeVW;(HR4IwPD1@hpNdDF2Uv$zk5|@)z;MYrHTS-n|(_mI>EUmDN2N@ zZY-H2l-kfm-vh#&Ip|ROY)uLc%I5VCtyu&@BPI$_YKm_Zn}T5S$Y16rLC*eyDt`*+ z=gTDC0*oKcS63yEGYWpO=b6#>$v0t{(@$&a?&7lEs^yy=HggAcHTJx#Ic4R96b)D) zRAvG7Z+Qi2e=6Knl;*B7Uc1x?q}neN*gWm3vA+D0OA$%fn#tS#G7m4=?)C%DasTgR zFtx){y}CpMviDgNNT2O5vY^)w!8S7(!FETA`{KRRk3a&C0md6$H-=xut-CkfsiiJlck2gg5BLo(NCYimP{2;CpL%PjL0iUD6(Vih#Yu#0_*(fb5^-~}x-2M0`WKoT>!5bi? z0a>tDq>G5oq4(X(>8!HLm^ot6a?8d|(8BB7(~2y%5`P=}v`BpegAwXH@Nw<62R4AC)YZn+v)t12~zl=a6I zlpWB4pv3o>wbSjMCCg`3!22@I2euy<{ljC)6~yMlc$(#u9%dzNOp&v2l3@^GOEtfZ zD~iE{t_zd9gQOdJmq&NG(C! zX(vA}9x#O;+^JuHuHKqL5zNkvlBf%ELUe!wP&&^!wvWAK-)=@anzrm8_{9|5<9Cpj zaw$3>G*(|QG*+*O*RyQHn7{ip%!l5&rUPw?p$zfpgN%(=AG=lBw=aX9ZhQpE4>N+o zJs(r6KXMd+UB+Y7uSQG)5d(Gbiu4XAZ*<)^SsFEN>BHnj#Q!|CW@66jbmpSj@r-t& zS5*X_p**ECKAso2W+{FIP3jZr4)Y2;Zg@XK*&F@lZ*t4jW2?31Aq@Yisb)Xp>W;jb z;3x&__!B4j6zHC3rFK20)kH%^7{4*VZynm~xQEj9F+1-4GJCQ4u&~y5hAcQZwEnIo z@E%PE{K!N$o|~es{z#1kRC1I|Uom2n{UvR50O$XxDX7w%@>T3WZ*JFu-Qx8o(h z;rxgItnSP9=z!(-wB1#n<}Jnuo2lj2v^y)+B;*2a@OJ z`ZjX4hK~Qv>}g9sMlEOD2%%~9ojE=8HJe2d>3)1E|M$B=B`RRfsgR9hp&`=;xV$%~ zyAd9}*vLku@TuE?`2f=ch?Sg=zV2kw8g#F-S(VyyxWDe~@-cxWKjsHeiB|-SC9m zUY|Kk&6bJ?z9u0EqDc0rbUGZAL#)4~+u!Wg^lqxq!stA&-~sz&-1k(>v;Sty1&QT| zM-I~N#Qa7Lq-h&ZPPu3Te*iF)&-bdls?3D#)9p42SI>;X*_s2+l?4ks#0kAmAsTa= zf(aT|LVgo!P1Ita4ixs`0a|?ht7>a3-jVQcGIkb?FLcv+&9&9}z!91Doe7_v80eEi zM$p9&O+G`x&Q6f6TQz4a3Vh+<&V!#%Sa!@}WJ2RDFf=v?$czA)J6hG6p3}1CeVT1= zk{hxnMZVc%0lf`301R2RUpPCQ&cyj6c)!RzXCpqbc(3DWX{;E(UmAp*ce=vemLoYZ zNPs{cxld-#7qOm$*44QspE7o|lW5+V%a1h?m?osv;273Mq!WYjLUJ#1d^o`^5>|lL zMu1ElJW>c5JjiU-{Rl$}QOGeUQ;!e?K>v1jjzYe)hX5Yg$rOAi*!Tg6RHe;&JH~ci z&x{q1vQEXz)fu8Wc;gc7&<-H_;#p@SPaa!sR}goml3N0}B66w*R0 zK$Hk`E^2=M^G#m)vw=VrQ_LdT6OKlqOpk+F5Bp>5M6e@gw5k&!X(&AR9j<8uh-bF$ zmL}b;ncE&*@v%eSn0>Yo2r5WeUdSd%(XhX66+FRB={7Q>NxVdEA&_|g6Ouu zR;u})X1)0XseLQXR2A{{c<}dUh@jT9c+MYxY1J&u{5777l=wO>G9lcf;h&7W- zm#-)?O2n6#_P_x{?|nSMo|q7u1x$zcqoM0AqLwUhj3+Ah@+>Xh&?1_|8zbmDiJUC& zhE9D6EPsd^L=Ja|dvR!fSe|S@AII3FfFGsT*h!JUwwXQ9g~Oivf>grHJ_s%X2QPu% zg0kaqTx?G{on~dp=hr`%R7{q4N;uV}Uu2T2gOQ8=AMOuMb^uF{ahZp0abAY)m~RUX zhmr1o6cM?P0yi!n4`*GH+t$F##9tEV^Rm-71_CQBL@L7y3S@*>evs&{sXkSFg_&seZmtmb=LKZ&)a$)ttZ5 ztLV71I_lTNGdETAORm2mQ|Fl&=K8oBANjT^4c@)6$$L>iZL;2GOgJIVeTO6PV|=*o zss4z%S$8DOee35%LFgc~f!6cfyvMKk@M3`!havj7JhGX&bb&s29m3S>*Z;N_Oy*u_ z#?X!r#mw#3#0YIOFhEo*8ko4m86r5pU^;v4>|DtQ<`fjDE{f$ND%gBc+QVJqBS4N+ z`v(bLVF%}i_GUm9toG1J_EUVT=LKXw9?Fz*3^*Zw+*EWqT*G~H8rCN?oi$dt9)8H~ z=OKDgc)z+E0(X{-(H!WFX{C$qdR5V~VbIN2f>ZuJ;C`Kth9!#?7)0&@Qf|Dw>FV71 zDO@F2>-17=yyCCeZS?)RXo=YfWbl+hGPXGj^l=VHV-mY6%kDYS(M_o1|8TxrTXi|n_1*$4+*}hh876ig z9q5G(?w}uJ{S}DZN1?{K@#1+4+A!&7GD?yGu+$y8JZ1JUujoh(M)@O2uY%psOT4#@ zuY^I&qj|;9S@j^b1`GNInPvmb>L~ZBwVGEtl%i9g>3W zY$~}SQszO~vy82{SlY<|TR+HqIGS=#r%(^Cr`84@zpS}kV&n(sFo+P3reJ_)?{bIDsq}d&HnQ7=s zvY%u157yrOcNEmA<-vD(j-vAWRWKSsYEd+b2Q!F+_L4b4c}#1*$j8DOgEi#22Y7DJs`=#i*IRD1ZeMF-*PugxcL9#emm_q

UVB*fq{dnRe1YEJ} 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%0D4Gj=Z}%WtLC~`=M+U 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

`Bp@c}*NXq7rbquk@u=Lj;(ESLRq@JSb1O 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 diff --git a/manifest.toml b/manifest.toml index cefe1995..f5aaa418 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "29.0.9~ynh1" +version = "30.0.2~ynh1" maintainers = ["kay0u"] @@ -24,7 +24,6 @@ architectures = ["amd64", "arm64", "armhf"] multi_instance = true ldap = true - sso = true disk = "650M" @@ -59,8 +58,12 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.9.tar.bz2' - sha256 = 'f14e8f497c6d6b2b0da5cd0ad116f0c99f720c4eb05e64432fbd86e09cfb4141' + url = 'https://download.nextcloud.com/server/releases/nextcloud-30.0.2.tar.bz2' + sha256 = '929bb8045e96216fe22a65dcd66279e5bd7ba1abb29d99bf401d423b646a445f' + + [resources.sources.29] + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' + sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' diff --git a/scripts/backup b/scripts/backup index 96d5808b..1407a99c 100755 --- a/scripts/backup +++ b/scripts/backup @@ -21,6 +21,13 @@ ynh_backup --src_path="$install_dir" ynh_backup --src_path="$data_dir" --is_big +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.d" + #================================================= # SYSTEM CONFIGURATION #================================================= diff --git a/scripts/change_url b/scripts/change_url index 15eaee94..ae966b1e 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -1,7 +1,5 @@ #!/bin/bash -#================================================= -# GENERIC STARTING #================================================= # IMPORT GENERIC HELPERS #================================================= @@ -79,7 +77,6 @@ then ynh_add_systemd_config --service="${app}-notify-push" count=0 - # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 @@ -95,8 +92,6 @@ then fi fi -#================================================= -# GENERIC FINALISATION #================================================= # RELOAD NGINX #================================================= diff --git a/scripts/config b/scripts/config index d9ae635b..d756fa9f 100644 --- a/scripts/config +++ b/scripts/config @@ -139,7 +139,6 @@ set__enable_notify_push() { ynh_add_systemd_config --service="${app}-notify-push" count=0 - # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/install b/scripts/install index 8af39aee..4229e7a8 100755 --- a/scripts/install +++ b/scripts/install @@ -306,7 +306,6 @@ ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.* if [ $enable_notify_push -eq 1 ] then count=0 - # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/restore b/scripts/restore index 6b9db07c..6a0bf604 100755 --- a/scripts/restore +++ b/scripts/restore @@ -4,8 +4,6 @@ source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers source ../settings/scripts/_ynh_mysql_connect_as.sh -#================================================= -# STANDARD RESTORATION STEPS #================================================= # RESTORE THE APP MAIN DIR #================================================= @@ -139,8 +137,6 @@ then systemctl enable --now "${app}-notify-push.service" --quiet fi -#================================================= -# GENERIC FINALIZATION #================================================= # RELOAD NGINX #================================================= @@ -160,7 +156,6 @@ exec_occ() { if [ $enable_notify_push -eq 1 ] then count=0 - # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/scripts/upgrade b/scripts/upgrade index ab9b0309..1871d924 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -40,8 +40,6 @@ then ynh_die --message="Upgrading from Nextcloud < 22.2 is not supported anymore. You should first upgrade to 22.2 using: yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/41f5f902e7c7cd3c30a6793020562ba98b9bf3e9" fi -#================================================= -# SPECIFIC UPGRADE #================================================= # MAKE SEQUENTIAL UPGRADES FROM EACH MAJOR # VERSION TO THE NEXT ONE @@ -441,7 +439,6 @@ ynh_add_fail2ban_config --logpath="/var/log/$app/nextcloud.log" --failregex="^.* if [ $enable_notify_push -eq 1 ] then count=0 - # cron can sometimes fail when the database is not fully initialized, hence it's retried several times, see https://github.com/YunoHost-Apps/nextcloud_ynh/pull/720 while ! ynh_exec_as "$app" php${phpversion} --define apc.enable_cli=1 $install_dir/cron.php && [[ $count -lt 30 ]] do sleep 1 diff --git a/tests.toml b/tests.toml index bd538ce0..3b5943a1 100644 --- a/tests.toml +++ b/tests.toml @@ -12,7 +12,7 @@ test_format = 1.0 test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" - test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" + test_upgrade_from.541f5fde.name = "Upgrade from 29.0.8" [default.curl_tests] #home.path = "/" @@ -38,8 +38,8 @@ test_format = 1.0 caldav.logged_on_sso = true caldav.expect_content = "This is the WebDAV interface." -[notify_push_test] +#[notify_push_test] - args.enable_notify_push = "1" - test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" - test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" +# args.enable_notify_push = "1" +# test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" +# test_upgrade_from.e9f82ab7.args.system_addressbook_exposed = "yes" From 2b41e99db9faf188e7202fedabd73ce1e24b9d30 Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 12:47:12 +0100 Subject: [PATCH 118/136] [comit] Forward Email? --- config_panel.toml | 11 +++++++++++ scripts/config | 24 +++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index dfbf1c41..1beca79e 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -47,6 +47,17 @@ name.fr = "Configuration de Nextcloud" help.en = "Notify Push is a mechanism allowing more instantaneous notifications and reduce server load." help.fr = "Notify Push est un mécanisme qui permet d'avoir des notifications plus rapides et de réduire la charge du serveur." + [main.forward_email] + name.en = "Forward Email?" + name.fr = "Emails de transfert?" + + [main.forward_email.enable_forward_email] + ask.en = "Set yunohost user's forward email instead of yunohost user's main email?" + ask.fr = "Utiliser les emails de transfert des utilisateurs de yunohost plutôt que les emails principaux ?" + type = "boolean" + help.en = "If all your users have set a forward email and aren't using yunohost emails, you may choose to set their forward email as their nextcloud email setting." + help.fr = "Si tous vos utilisateurs ont paramétré un email de transfert et n'utilise pas du tout les emails de leur compte yunohost, vous pouvez paramétrer nextcloud d'utiliser les emails de transfert." + [main.php_fpm_config] name.en = "PHP-FPM configuration" name.fr = "Configuration de PHP-FPM" diff --git a/scripts/config b/scripts/config index d756fa9f..1038e7af 100644 --- a/scripts/config +++ b/scripts/config @@ -47,6 +47,16 @@ get__system_addressbook_exposed() { echo $(exec_occ config:app:get dav system_addressbook_exposed) } +get__enable_forward_email() { + ldapEmail=$(exec_occ ldap:show-config | grep ldapEmailAttribute) + if [ $(echo $ldapEmail | grep -Po "maildrop") = "maildrop" ] + then + echo "1" + else + echo "0" + fi +} + get__fpm_footprint() { # Free footprint value for php-fpm # Check if current_fpm_footprint is an integer @@ -92,7 +102,6 @@ set__system_addressbook_exposed() { ynh_print_info "System addressbook is exposed: $system_addressbook_exposed" } - set__enable_notify_push() { if [ "$enable_notify_push" -eq "0" ]; then nginx_extra_conf_dir="/etc/nginx/conf.d/$domain.d/$app.d" @@ -156,6 +165,19 @@ set__enable_notify_push() { ynh_app_setting_set --app=$app --key=enable_notify_push --value="$enable_notify_push" } +set__enable_forward_email() { + if [ "$enable_forward_email" -eq "0" ]; then + exec_occ ldap:set-config "" ldapEmailAttribute "mail" + ynh_replace_string --match_string="\$this->updateEmail(\$ldapEntry\[\$attr\]\[1\]);" --replace_string="\$this->updateEmail(\$ldapEntry\[\$attr\]\[0\]);" --target_file="$install_dir/apps/user_ldap/lib/User/User.php" + ynh_store_file_checksum --file="$install_dir/apps/user_ldap/lib/User/User.php" + elif [ "$enable_forward_email" -eq "1" ]; then + exec_occ ldap:set-config "" ldapEmailAttribute "maildrop" + ynh_replace_string --match_string="\$this->updateEmail(\$ldapEntry\[\$attr\]\[0\]);" --replace_string="\$this->updateEmail(\$ldapEntry\[\$attr\]\[1\]);" --target_file="$install_dir/apps/user_ldap/lib/User/User.php" + ynh_store_file_checksum --file="$install_dir/apps/user_ldap/lib/User/User.php" + fi + ynh_app_setting_set --app=$app --key=enable_forward_email --value="$enable_forward_email" +} + set__fpm_footprint() { if [ "$fpm_footprint" != "specific" ] then From 383f3b706a3acb82335613fe8c3815867d7b5665 Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 13:54:59 +0100 Subject: [PATCH 119/136] Update config_panel.toml Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index 1beca79e..1745278d 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -49,7 +49,7 @@ name.fr = "Configuration de Nextcloud" [main.forward_email] name.en = "Forward Email?" - name.fr = "Emails de transfert?" + name.fr = "E-mails de transfert?" [main.forward_email.enable_forward_email] ask.en = "Set yunohost user's forward email instead of yunohost user's main email?" From c7f704348e4e2e33a5a9edf432d5137ef20f567e Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 13:55:12 +0100 Subject: [PATCH 120/136] Update config_panel.toml Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index 1745278d..b58d90e1 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -52,7 +52,7 @@ name.fr = "Configuration de Nextcloud" name.fr = "E-mails de transfert?" [main.forward_email.enable_forward_email] - ask.en = "Set yunohost user's forward email instead of yunohost user's main email?" + ask.en = "Set YunoHost user's forward email instead of YunoHost user's main email?" ask.fr = "Utiliser les emails de transfert des utilisateurs de yunohost plutôt que les emails principaux ?" type = "boolean" help.en = "If all your users have set a forward email and aren't using yunohost emails, you may choose to set their forward email as their nextcloud email setting." From 16b503064f7da91125f2123655497eee1fde9dd8 Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 13:55:21 +0100 Subject: [PATCH 121/136] Update config_panel.toml Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index b58d90e1..9578acd4 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -53,7 +53,7 @@ name.fr = "Configuration de Nextcloud" [main.forward_email.enable_forward_email] ask.en = "Set YunoHost user's forward email instead of YunoHost user's main email?" - ask.fr = "Utiliser les emails de transfert des utilisateurs de yunohost plutôt que les emails principaux ?" + ask.fr = "Utiliser les e-mails de transfert des utilisateurs de YunoHost plutôt que les e-mails principaux ?" type = "boolean" help.en = "If all your users have set a forward email and aren't using yunohost emails, you may choose to set their forward email as their nextcloud email setting." help.fr = "Si tous vos utilisateurs ont paramétré un email de transfert et n'utilise pas du tout les emails de leur compte yunohost, vous pouvez paramétrer nextcloud d'utiliser les emails de transfert." From e9082239914cb7f30c048316fc8cea4b79567a2c Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 13:55:30 +0100 Subject: [PATCH 122/136] Update config_panel.toml Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index 9578acd4..e76eafb5 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -55,7 +55,7 @@ name.fr = "Configuration de Nextcloud" ask.en = "Set YunoHost user's forward email instead of YunoHost user's main email?" ask.fr = "Utiliser les e-mails de transfert des utilisateurs de YunoHost plutôt que les e-mails principaux ?" type = "boolean" - help.en = "If all your users have set a forward email and aren't using yunohost emails, you may choose to set their forward email as their nextcloud email setting." + help.en = "If all your users have set a forward email and aren't using YunoHost emails, you may choose to set their forward email as their Nextcloud email setting." help.fr = "Si tous vos utilisateurs ont paramétré un email de transfert et n'utilise pas du tout les emails de leur compte yunohost, vous pouvez paramétrer nextcloud d'utiliser les emails de transfert." [main.php_fpm_config] From 9790ea9ab35df702b3a46ca072860311ce58ec17 Mon Sep 17 00:00:00 2001 From: Thatoo Date: Sun, 17 Nov 2024 13:55:38 +0100 Subject: [PATCH 123/136] Update config_panel.toml Co-authored-by: eric_G <46165813+ericgaspar@users.noreply.github.com> --- config_panel.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config_panel.toml b/config_panel.toml index e76eafb5..90a43dd8 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -56,7 +56,7 @@ name.fr = "Configuration de Nextcloud" ask.fr = "Utiliser les e-mails de transfert des utilisateurs de YunoHost plutôt que les e-mails principaux ?" type = "boolean" help.en = "If all your users have set a forward email and aren't using YunoHost emails, you may choose to set their forward email as their Nextcloud email setting." - help.fr = "Si tous vos utilisateurs ont paramétré un email de transfert et n'utilise pas du tout les emails de leur compte yunohost, vous pouvez paramétrer nextcloud d'utiliser les emails de transfert." + help.fr = "Si tous vos utilisateurs ont paramétré un e-mail de transfert et n'utilise pas du tout les e-mails de leur compte YunoHost, vous pouvez paramétrer Nextcloud d'utiliser les e-mails de transfert." [main.php_fpm_config] name.en = "PHP-FPM configuration" From 866fb3c53e835c523476c4d3e6aa9436e9a52054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:22:51 +0100 Subject: [PATCH 124/136] Update tests.toml --- tests.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests.toml b/tests.toml index 3b5943a1..2b893c03 100644 --- a/tests.toml +++ b/tests.toml @@ -8,10 +8,10 @@ test_format = 1.0 # Commits to test upgrade from # ------------------------------- - test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" - test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" - test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" - test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" + #test_upgrade_from.c5cf91ad.name = "Upgrade from 25.0.2" + #test_upgrade_from.caf917f3.name = "Upgrade from 26.0.2" + #test_upgrade_from.9c6d1eea.name = "Upgrade from 27.1.4" + #test_upgrade_from.e9f82ab7.name = "Upgrade from 28.0.6" test_upgrade_from.541f5fde.name = "Upgrade from 29.0.8" [default.curl_tests] From cbc06de0f155726f499b94c6d4952480a1e1afd9 Mon Sep 17 00:00:00 2001 From: Thatoo Date: Mon, 2 Dec 2024 00:08:08 +0100 Subject: [PATCH 125/136] add name nextcloud LDAP config to get__enable_forward_email --- scripts/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/config b/scripts/config index 1038e7af..0eb4d671 100644 --- a/scripts/config +++ b/scripts/config @@ -48,7 +48,7 @@ get__system_addressbook_exposed() { } get__enable_forward_email() { - ldapEmail=$(exec_occ ldap:show-config | grep ldapEmailAttribute) + ldapEmail=$(exec_occ ldap:show-config "" | grep ldapEmailAttribute) if [ $(echo $ldapEmail | grep -Po "maildrop") = "maildrop" ] then echo "1" From 9e5bcc19d8c9aec2ba44f5c9e1b5b11ee8d55e87 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:55:40 +0100 Subject: [PATCH 126/136] Add quote in if [ $(cmd) = value ] because i'm paranoid about [ syntax ... --- scripts/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/config b/scripts/config index 0eb4d671..ed7b10f5 100644 --- a/scripts/config +++ b/scripts/config @@ -49,7 +49,7 @@ get__system_addressbook_exposed() { get__enable_forward_email() { ldapEmail=$(exec_occ ldap:show-config "" | grep ldapEmailAttribute) - if [ $(echo $ldapEmail | grep -Po "maildrop") = "maildrop" ] + if [ "$(echo $ldapEmail | grep -Po "maildrop")" = "maildrop" ] then echo "1" else From b9354d0386001c23269ac295c01334b44c0c9ad9 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Tue, 3 Dec 2024 22:03:04 +0100 Subject: [PATCH 127/136] Auto-update READMEs --- ALL_README.md | 1 + README.md | 4 +++- README_es.md | 4 +++- README_eu.md | 4 +++- README_fr.md | 4 +++- README_gl.md | 4 +++- README_id.md | 4 +++- README_nl.md | 4 +++- README_pl.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++ README_ru.md | 4 +++- README_zh_Hans.md | 4 +++- 11 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 README_pl.md diff --git a/ALL_README.md b/ALL_README.md index df3708bc..c93d6202 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -7,5 +7,6 @@ - [Le o README en galego](README_gl.md) - [Baca README dalam bahasa bahasa Indonesia](README_id.md) - [Lees de README in het Nederlands](README_nl.md) +- [Przeczytaj README w języku polski](README_pl.md) - [Прочитать README на русский](README_ru.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README.md b/README.md index a3362adb..f645d760 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ It shall NOT be edited by hand. # Nextcloud for YunoHost -[![Integration level](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Working status](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integration level](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Working status](https://apps.yunohost.org/badge/state/nextcloud) +![Maintenance status](https://apps.yunohost.org/badge/maintained/nextcloud) [![Install Nextcloud with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_es.md b/README_es.md index 2ad07b4c..7dd382f9 100644 --- a/README_es.md +++ b/README_es.md @@ -5,7 +5,9 @@ No se debe editar a mano. # Nextcloud para Yunohost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Estado funcional](https://apps.yunohost.org/badge/state/nextcloud) +![Estado En Mantención](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalar Nextcloud con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_eu.md b/README_eu.md index 3497e0f5..dfce54f4 100644 --- a/README_eu.md +++ b/README_eu.md @@ -5,7 +5,9 @@ EZ editatu eskuz. # Nextcloud YunoHost-erako -[![Integrazio maila](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integrazio maila](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Funtzionamendu egoera](https://apps.yunohost.org/badge/state/nextcloud) +![Mantentze egoera](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalatu Nextcloud YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_fr.md b/README_fr.md index 961b66d7..d211d8c2 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,7 +5,9 @@ Il NE doit PAS être modifié à la main. # Nextcloud pour YunoHost -[![Niveau d’intégration](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Niveau d’intégration](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Statut du fonctionnement](https://apps.yunohost.org/badge/state/nextcloud) +![Statut de maintenance](https://apps.yunohost.org/badge/maintained/nextcloud) [![Installer Nextcloud avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_gl.md b/README_gl.md index 3df812e9..6ac9c635 100644 --- a/README_gl.md +++ b/README_gl.md @@ -5,7 +5,9 @@ NON debe editarse manualmente. # Nextcloud para YunoHost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Estado de funcionamento](https://apps.yunohost.org/badge/state/nextcloud) +![Estado de mantemento](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalar Nextcloud con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_id.md b/README_id.md index 1ab90c21..17f53464 100644 --- a/README_id.md +++ b/README_id.md @@ -5,7 +5,9 @@ Ini TIDAK boleh diedit dengan tangan. # Nextcloud untuk YunoHost -[![Tingkat integrasi](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Status kerja](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Status pemeliharaan](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Tingkat integrasi](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Status kerja](https://apps.yunohost.org/badge/state/nextcloud) +![Status pemeliharaan](https://apps.yunohost.org/badge/maintained/nextcloud) [![Pasang Nextcloud dengan YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_nl.md b/README_nl.md index 3b30af19..a74b7899 100644 --- a/README_nl.md +++ b/README_nl.md @@ -5,7 +5,9 @@ Hij mag NIET handmatig aangepast worden. # Nextcloud voor Yunohost -[![Integratieniveau](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Mate van functioneren](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Onderhoudsstatus](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integratieniveau](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Mate van functioneren](https://apps.yunohost.org/badge/state/nextcloud) +![Onderhoudsstatus](https://apps.yunohost.org/badge/maintained/nextcloud) [![Nextcloud met Yunohost installeren](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_pl.md b/README_pl.md new file mode 100644 index 00000000..d2ffb069 --- /dev/null +++ b/README_pl.md @@ -0,0 +1,58 @@ + + +# Nextcloud dla YunoHost + +[![Poziom integracji](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Status działania](https://apps.yunohost.org/badge/state/nextcloud) +![Status utrzymania](https://apps.yunohost.org/badge/maintained/nextcloud) + +[![Zainstaluj Nextcloud z YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Przeczytaj plik README w innym języku.](./ALL_README.md)* + +> *Ta aplikacja pozwala na szybką i prostą instalację Nextcloud na serwerze YunoHost.* +> *Jeżeli nie masz YunoHost zapoznaj się z [poradnikiem](https://yunohost.org/install) instalacji.* + +## Przegląd + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. + +**Dostarczona wersja:** 30.0.2~ynh1 + +**Demo:** + +## Zrzuty ekranu + +![Zrzut ekranu z Nextcloud](./doc/screenshots/screenshot.png) + +## Dokumentacja i zasoby + +- Oficjalna strona aplikacji: +- Oficjalna dokumentacja: +- Oficjalna dokumentacja dla administratora: +- Repozytorium z kodem źródłowym: +- Sklep YunoHost: +- Zgłaszanie błędów: + +## Informacje od twórców + +Wyślij swój pull request do [gałęzi `testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Aby wypróbować gałąź `testing` postępuj zgodnie z instrukcjami: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +lub +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Więcej informacji o tworzeniu paczek aplikacji:** diff --git a/README_ru.md b/README_ru.md index ad911990..4c845b78 100644 --- a/README_ru.md +++ b/README_ru.md @@ -5,7 +5,9 @@ # Nextcloud для YunoHost -[![Уровень интеграции](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Состояние работы](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Состояние сопровождения](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Уровень интеграции](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Состояние работы](https://apps.yunohost.org/badge/state/nextcloud) +![Состояние сопровождения](https://apps.yunohost.org/badge/maintained/nextcloud) [![Установите Nextcloud с YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 66d266c6..6c07a52f 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -5,7 +5,9 @@ # YunoHost 上的 Nextcloud -[![集成程度](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![工作状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![集成程度](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![工作状态](https://apps.yunohost.org/badge/state/nextcloud) +![维护状态](https://apps.yunohost.org/badge/maintained/nextcloud) [![使用 YunoHost 安装 Nextcloud](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) From f4624019075f92a3b8f03fbae162b7fa77827188 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin <4533074+alexAubin@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:05:35 +0100 Subject: [PATCH 128/136] Update manifest.toml: revert to 29.0.8 with prefetch = false to fix tests --- manifest.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manifest.toml b/manifest.toml index c467335d..629802bf 100644 --- a/manifest.toml +++ b/manifest.toml @@ -62,8 +62,9 @@ ram.runtime = "512M" sha256 = '929bb8045e96216fe22a65dcd66279e5bd7ba1abb29d99bf401d423b646a445f' [resources.sources.29] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.9.tar.bz2' - sha256 = 'f14e8f497c6d6b2b0da5cd0ad116f0c99f720c4eb05e64432fbd86e09cfb4141' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' + sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' + prefetch = false [resources.sources.28] url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' From b7b5f3422a4328f1cf00bdb388ed6582a147f934 Mon Sep 17 00:00:00 2001 From: tituspijean Date: Tue, 3 Dec 2024 22:19:10 +0100 Subject: [PATCH 129/136] Disable output buffering (#758) --- conf/extra_php-fpm.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/extra_php-fpm.conf b/conf/extra_php-fpm.conf index fd92447d..798265ba 100644 --- a/conf/extra_php-fpm.conf +++ b/conf/extra_php-fpm.conf @@ -15,6 +15,8 @@ php_value[opcache.max_accelerated_files]=10000 php_value[opcache.memory_consumption]=128 php_value[opcache.save_comments]=1 php_value[opcache.revalidate_freq]=60 +; https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html#configuring-php +php_value[output_buffering]=0 ; https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html#id1 php_value[apc.enabled]=1 php_value[apc.enable_cli]=1 From aea6a8de9e770b6becdbc4b3f47c1c3c1c1aca13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Tue, 3 Dec 2024 22:49:57 +0100 Subject: [PATCH 130/136] Update backup --- scripts/backup | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scripts/backup b/scripts/backup index 1407a99c..96d5808b 100755 --- a/scripts/backup +++ b/scripts/backup @@ -21,13 +21,6 @@ ynh_backup --src_path="$install_dir" ynh_backup --src_path="$data_dir" --is_big -#================================================= -# BACKUP THE NGINX CONFIGURATION -#================================================= - -ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" -ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.d" - #================================================= # SYSTEM CONFIGURATION #================================================= From 4ec797a604638d3a4e18336689779ce96458f95b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:02:37 +0100 Subject: [PATCH 131/136] Update manifest.toml --- manifest.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/manifest.toml b/manifest.toml index 629802bf..9aaa619e 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ name = "Nextcloud" description.en = "Online storage, file sharing platform and various other applications" description.fr = "Stockage en ligne, plateforme de partage de fichiers et diverses autres applications" -version = "30.0.2~ynh1" +version = "30.0.3~ynh1" maintainers = ["kay0u"] @@ -58,12 +58,12 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-30.0.2.tar.bz2' - sha256 = '929bb8045e96216fe22a65dcd66279e5bd7ba1abb29d99bf401d423b646a445f' + url = 'https://download.nextcloud.com/server/releases/nextcloud-30.0.3.tar.bz2' + sha256 = 'e3daa583a8c139a4781ff71dd20d4b98f90c7d881c2a49c2d236e785a0bd08d5' [resources.sources.29] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' - sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.10.tar.bz2' + sha256 = 'a5863d9f13af177f27d883317f96c3d176e7b1ca70b0ddd7958494582b494577' prefetch = false [resources.sources.28] From e4b820d271d301f1640b8223f1e22a631a038677 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 5 Dec 2024 20:02:42 +0100 Subject: [PATCH 132/136] Auto-update READMEs --- README.md | 2 +- README_es.md | 2 +- README_eu.md | 2 +- README_fr.md | 2 +- README_gl.md | 2 +- README_id.md | 2 +- README_nl.md | 2 +- README_pl.md | 2 +- README_ru.md | 2 +- README_zh_Hans.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f645d760..c48a61d0 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Shipped version:** 30.0.2~ynh1 +**Shipped version:** 30.0.3~ynh1 **Demo:** diff --git a/README_es.md b/README_es.md index 7dd382f9..0d0fc133 100644 --- a/README_es.md +++ b/README_es.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión actual:** 30.0.2~ynh1 +**Versión actual:** 30.0.3~ynh1 **Demo:** diff --git a/README_eu.md b/README_eu.md index dfce54f4..fcaf24a0 100644 --- a/README_eu.md +++ b/README_eu.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Paketatutako bertsioa:** 30.0.2~ynh1 +**Paketatutako bertsioa:** 30.0.3~ynh1 **Demoa:** diff --git a/README_fr.md b/README_fr.md index d211d8c2..1ef173bd 100644 --- a/README_fr.md +++ b/README_fr.md @@ -27,7 +27,7 @@ L'adresse `/.well-known` sera automatiquement configuré pour la synchronisatio Le catalogue YunoHost dispose de deux suites bureautiques collaboratives, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) et [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), qui peuvent être intégrées à Nextcloud. -**Version incluse :** 30.0.2~ynh1 +**Version incluse :** 30.0.3~ynh1 **Démo :** diff --git a/README_gl.md b/README_gl.md index 6ac9c635..5d1caf92 100644 --- a/README_gl.md +++ b/README_gl.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versión proporcionada:** 30.0.2~ynh1 +**Versión proporcionada:** 30.0.3~ynh1 **Demo:** diff --git a/README_id.md b/README_id.md index 17f53464..3d193b94 100644 --- a/README_id.md +++ b/README_id.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Versi terkirim:** 30.0.2~ynh1 +**Versi terkirim:** 30.0.3~ynh1 **Demo:** diff --git a/README_nl.md b/README_nl.md index a74b7899..aaace92f 100644 --- a/README_nl.md +++ b/README_nl.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Geleverde versie:** 30.0.2~ynh1 +**Geleverde versie:** 30.0.3~ynh1 **Demo:** diff --git a/README_pl.md b/README_pl.md index d2ffb069..e741bf8b 100644 --- a/README_pl.md +++ b/README_pl.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Dostarczona wersja:** 30.0.2~ynh1 +**Dostarczona wersja:** 30.0.3~ynh1 **Demo:** diff --git a/README_ru.md b/README_ru.md index 4c845b78..70963663 100644 --- a/README_ru.md +++ b/README_ru.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**Поставляемая версия:** 30.0.2~ynh1 +**Поставляемая версия:** 30.0.3~ynh1 **Демо-версия:** diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 6c07a52f..7b6c6328 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -26,7 +26,7 @@ The `/.well-known` address will be automatically configured for CalDAV and CardD The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. -**分发版本:** 30.0.2~ynh1 +**分发版本:** 30.0.3~ynh1 **演示:** From f7b29ecb9f075dced1bf922bfddbfec586d5dc70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:18:43 +0100 Subject: [PATCH 133/136] Update manifest.toml --- manifest.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.toml b/manifest.toml index 9aaa619e..086012f7 100644 --- a/manifest.toml +++ b/manifest.toml @@ -67,8 +67,8 @@ ram.runtime = "512M" prefetch = false [resources.sources.28] - url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' - sha256 = '55a2f745fcc8f01b5816b23333f1e3014d2040a66794e132ddd0d219a37be53a' + url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.13.tar.bz2' + sha256 = '989130cac091c1adb9696f97956e69e5cdd07176d292c3fb086db9c62cf71db5' prefetch = false [resources.sources.27] From 266ddba978c3a04464150a0d09b160c903fe4820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?E=CC=81ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:22:02 +0100 Subject: [PATCH 134/136] Update manifest.toml --- manifest.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.toml b/manifest.toml index 6c2dbcc3..2bb7a53b 100644 --- a/manifest.toml +++ b/manifest.toml @@ -68,12 +68,12 @@ ram.runtime = "512M" [resources.sources] [resources.sources.main] - url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.8.tar.bz2' - sha256 = '0ab54b517f76cd26f2bd38b6fe184b9fbaed32f734246c58c1acf83473c0a4b9' + url = 'https://download.nextcloud.com/server/releases/nextcloud-29.0.10.tar.bz2' + sha256 = 'a5863d9f13af177f27d883317f96c3d176e7b1ca70b0ddd7958494582b494577' [resources.sources.28] - url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.8.tar.bz2' - sha256 = '55a2f745fcc8f01b5816b23333f1e3014d2040a66794e132ddd0d219a37be53a' + url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.13.tar.bz2' + sha256 = '989130cac091c1adb9696f97956e69e5cdd07176d292c3fb086db9c62cf71db5' prefetch = false [resources.sources.27] From f18792a68e3fb4972dfb5b30ebd97b82557d7048 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 5 Dec 2024 20:22:09 +0100 Subject: [PATCH 135/136] Auto-update READMEs --- ALL_README.md | 1 + README.md | 4 +++- README_es.md | 4 +++- README_eu.md | 4 +++- README_fr.md | 4 +++- README_gl.md | 4 +++- README_id.md | 4 +++- README_nl.md | 4 +++- README_pl.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++ README_ru.md | 4 +++- README_zh_Hans.md | 4 +++- 11 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 README_pl.md diff --git a/ALL_README.md b/ALL_README.md index df3708bc..c93d6202 100644 --- a/ALL_README.md +++ b/ALL_README.md @@ -7,5 +7,6 @@ - [Le o README en galego](README_gl.md) - [Baca README dalam bahasa bahasa Indonesia](README_id.md) - [Lees de README in het Nederlands](README_nl.md) +- [Przeczytaj README w języku polski](README_pl.md) - [Прочитать README на русский](README_ru.md) - [阅读中文(简体)的 README](README_zh_Hans.md) diff --git a/README.md b/README.md index d608f468..4e11d545 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ It shall NOT be edited by hand. # Nextcloud for YunoHost -[![Integration level](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Working status](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integration level](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Working status](https://apps.yunohost.org/badge/state/nextcloud) +![Maintenance status](https://apps.yunohost.org/badge/maintained/nextcloud) [![Install Nextcloud with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_es.md b/README_es.md index 2cd59a4e..bee8880d 100644 --- a/README_es.md +++ b/README_es.md @@ -5,7 +5,9 @@ No se debe editar a mano. # Nextcloud para Yunohost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Estado funcional](https://apps.yunohost.org/badge/state/nextcloud) +![Estado En Mantención](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalar Nextcloud con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_eu.md b/README_eu.md index 4f8f9c6e..13ede286 100644 --- a/README_eu.md +++ b/README_eu.md @@ -5,7 +5,9 @@ EZ editatu eskuz. # Nextcloud YunoHost-erako -[![Integrazio maila](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integrazio maila](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Funtzionamendu egoera](https://apps.yunohost.org/badge/state/nextcloud) +![Mantentze egoera](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalatu Nextcloud YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_fr.md b/README_fr.md index 0f754fee..258cdda3 100644 --- a/README_fr.md +++ b/README_fr.md @@ -5,7 +5,9 @@ Il NE doit PAS être modifié à la main. # Nextcloud pour YunoHost -[![Niveau d’intégration](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Niveau d’intégration](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Statut du fonctionnement](https://apps.yunohost.org/badge/state/nextcloud) +![Statut de maintenance](https://apps.yunohost.org/badge/maintained/nextcloud) [![Installer Nextcloud avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_gl.md b/README_gl.md index ab48ea3f..98e0429b 100644 --- a/README_gl.md +++ b/README_gl.md @@ -5,7 +5,9 @@ NON debe editarse manualmente. # Nextcloud para YunoHost -[![Nivel de integración](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Estado de funcionamento](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Estado de mantemento](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Nivel de integración](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Estado de funcionamento](https://apps.yunohost.org/badge/state/nextcloud) +![Estado de mantemento](https://apps.yunohost.org/badge/maintained/nextcloud) [![Instalar Nextcloud con YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_id.md b/README_id.md index f06ecd5c..eee107fd 100644 --- a/README_id.md +++ b/README_id.md @@ -5,7 +5,9 @@ Ini TIDAK boleh diedit dengan tangan. # Nextcloud untuk YunoHost -[![Tingkat integrasi](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Status kerja](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Status pemeliharaan](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Tingkat integrasi](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Status kerja](https://apps.yunohost.org/badge/state/nextcloud) +![Status pemeliharaan](https://apps.yunohost.org/badge/maintained/nextcloud) [![Pasang Nextcloud dengan YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_nl.md b/README_nl.md index dace8128..e1cfd88d 100644 --- a/README_nl.md +++ b/README_nl.md @@ -5,7 +5,9 @@ Hij mag NIET handmatig aangepast worden. # Nextcloud voor Yunohost -[![Integratieniveau](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Mate van functioneren](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Onderhoudsstatus](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Integratieniveau](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Mate van functioneren](https://apps.yunohost.org/badge/state/nextcloud) +![Onderhoudsstatus](https://apps.yunohost.org/badge/maintained/nextcloud) [![Nextcloud met Yunohost installeren](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_pl.md b/README_pl.md new file mode 100644 index 00000000..54c2c223 --- /dev/null +++ b/README_pl.md @@ -0,0 +1,58 @@ + + +# Nextcloud dla YunoHost + +[![Poziom integracji](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Status działania](https://apps.yunohost.org/badge/state/nextcloud) +![Status utrzymania](https://apps.yunohost.org/badge/maintained/nextcloud) + +[![Zainstaluj Nextcloud z YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) + +*[Przeczytaj plik README w innym języku.](./ALL_README.md)* + +> *Ta aplikacja pozwala na szybką i prostą instalację Nextcloud na serwerze YunoHost.* +> *Jeżeli nie masz YunoHost zapoznaj się z [poradnikiem](https://yunohost.org/install) instalacji.* + +## Przegląd + +Nextcloud lets you access and synchronize data, files, contacts and calendars between different devices (PCs or mobiles), or share them with other people (with or without accounts), and also offers advanced communication and collaborative working features. Nextcloud features its own application mechanism (see also [Nextcloud's app store](https://apps.nextcloud.com/)) for specific functionalities. + +In the context of YunoHost, Nextcloud integrates with the SSO/User Portal (YunoHost accounts are automatically connected to Nextcloud). + +The `/.well-known` address will be automatically configured for CalDAV and CardDAV synchronization if no other service such as Baïkal is already using it. + +The YunoHost catalog has two collaborative office suites, [OnlyOffice](https://github.com/YunoHost-Apps/onlyoffice_ynh) and [Collabora](https://github.com/YunoHost-Apps/collabora_ynh), which can be integrated with Nextcloud. + +**Dostarczona wersja:** 29.0.8~ynh1 + +**Demo:** + +## Zrzuty ekranu + +![Zrzut ekranu z Nextcloud](./doc/screenshots/screenshot.png) + +## Dokumentacja i zasoby + +- Oficjalna strona aplikacji: +- Oficjalna dokumentacja: +- Oficjalna dokumentacja dla administratora: +- Repozytorium z kodem źródłowym: +- Sklep YunoHost: +- Zgłaszanie błędów: + +## Informacje od twórców + +Wyślij swój pull request do [gałęzi `testing`](https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing). + +Aby wypróbować gałąź `testing` postępuj zgodnie z instrukcjami: + +```bash +sudo yunohost app install https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +lub +sudo yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/testing --debug +``` + +**Więcej informacji o tworzeniu paczek aplikacji:** diff --git a/README_ru.md b/README_ru.md index f0d9f773..3498800b 100644 --- a/README_ru.md +++ b/README_ru.md @@ -5,7 +5,9 @@ # Nextcloud для YunoHost -[![Уровень интеграции](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![Состояние работы](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![Состояние сопровождения](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![Уровень интеграции](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![Состояние работы](https://apps.yunohost.org/badge/state/nextcloud) +![Состояние сопровождения](https://apps.yunohost.org/badge/maintained/nextcloud) [![Установите Nextcloud с YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) diff --git a/README_zh_Hans.md b/README_zh_Hans.md index 17ecba4e..553d98a4 100644 --- a/README_zh_Hans.md +++ b/README_zh_Hans.md @@ -5,7 +5,9 @@ # YunoHost 上的 Nextcloud -[![集成程度](https://dash.yunohost.org/integration/nextcloud.svg)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) ![工作状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/nextcloud.maintain.svg) +[![集成程度](https://apps.yunohost.org/badge/integration/nextcloud)](https://ci-apps.yunohost.org/ci/apps/nextcloud/) +![工作状态](https://apps.yunohost.org/badge/state/nextcloud) +![维护状态](https://apps.yunohost.org/badge/maintained/nextcloud) [![使用 YunoHost 安装 Nextcloud](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=nextcloud) From 5f5e5605f888034e9e8fc124c32fee7e982c9404 Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 21 Dec 2024 14:54:17 +0100 Subject: [PATCH 136/136] Update upgrade --- scripts/upgrade | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 77b29636..fd3fc861 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -184,7 +184,6 @@ then source_id="$next_major_version" if [[ "$next_major_version" -ge "$last_major_version" ]]; then ynh_print_info "Upgrading to Nextcloud $last_version" - cp -a ../sources/patches_last_version/* ../sources/patches if [[ "$version_to_follow" != "oldstable" ]] then source_id="main"