diff --git a/.github/ISSUE_TEMPLATE/bug_resolution.yml b/.github/ISSUE_TEMPLATE/bug_resolution.yml index 9253e123c..376a9045f 100644 --- a/.github/ISSUE_TEMPLATE/bug_resolution.yml +++ b/.github/ISSUE_TEMPLATE/bug_resolution.yml @@ -89,6 +89,7 @@ body: label: Version description: What version of CryptPad are you running? options: + - 2026.1.0 - 2025.9.0 - 2025.6.0 - 2025.3.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index cf35668a0..259def9ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,106 @@ SPDX-License-Identifier: AGPL-3.0-or-later --> +# ❄️ Winter release (2026.2.0) + +## Goals + +This release upgrades our office applications with OnlyOffice 9 as well as the same history browsing feature as our other applications (history was limited until now). We also include a redesigned folder tree in the drive, and many other improvements and fixes as detailed below. + +## Features + +- Upgrade Office applications to OnlyOffice v9.2.0.119 +- OnlyOffice history browsing [#2134](https://github.com/cryptpad/cryptpad/pull/2134) +- Update drive tree UI [#2102](https://github.com/cryptpad/cryptpad/pull/2102) + +## Improvements + +- Integration API improvements [#2139](https://github.com/cryptpad/cryptpad/pull/2139) +- Integration API: Allow client download [#2114](https://github.com/cryptpad/cryptpad/pull/2114) +- Let the user close the old password error modal, without having to refresh the login page [#2125](https://github.com/cryptpad/cryptpad/pull/2125) +- Add support for required poll questions in forms [#2092](https://github.com/cryptpad/cryptpad/pull/2092) +- Improve support & moderation UI [#2082](https://github.com/cryptpad/cryptpad/pull/2082) +- Enable Dutch language [#2148](https://github.com/cryptpad/cryptpad/pull/2148) + +## Fixes + +- Account, Profile and Contacts + - Fix incorrect error message for invalid credentials [#2163](https://github.com/cryptpad/cryptpad/pull/2163) + - Delete 2FA data when archiving account [#2177](https://github.com/cryptpad/cryptpad/pull/2177) + - Fix padding for profile action buttons [#2081](https://github.com/cryptpad/cryptpad/pull/2081) + - Fix contact page name overflow [#2084](https://github.com/cryptpad/cryptpad/pull/2084) + - Fix: Profile description editor now shows saved value without requiring focus [#2100](https://github.com/cryptpad/cryptpad/pull/2100) +- Drives + - Fix rtChannel not always stored and pinned [#2168](https://github.com/cryptpad/cryptpad/pull/2168) + - Preserve drive list sorting order across reloads [#2115](https://github.com/cryptpad/cryptpad/pull/2115) + - Fix: Removed avatars are no longer shown in team roster [#2087](https://github.com/cryptpad/cryptpad/pull/2087) + - Fix text overflow issues on Ctrl+E (New document) modal [#2117](https://github.com/cryptpad/cryptpad/pull/2117) + - Fix: Context menu new document options now respect selected type [#2124](https://github.com/cryptpad/cryptpad/pull/2124) +- Apps + - Hide History button if history disabled [#2104](https://github.com/cryptpad/cryptpad/pull/2104) + - Disable dragging when selecting text inside title and items for Kanban cards [#2088](https://github.com/cryptpad/cryptpad/pull/2088) + - Add missing margin to elements in Form [#2083](https://github.com/cryptpad/cryptpad/pull/2083) + - CKEditor undo stack cleared on refresh [#2121](https://github.com/cryptpad/cryptpad/pull/2121) + - change code-pad to code [#2160](https://github.com/cryptpad/cryptpad/pull/2160) @achf01 +- Office apps + - Do not delete last checkpoint on 5xx error [#2166](https://github.com/cryptpad/cryptpad/pull/2166) + - OnlyOffice tab notifications [#2110](https://github.com/cryptpad/cryptpad/pull/2110) + - install-onlyoffice.sh: fix --check for new install_version function [#2097](https://github.com/cryptpad/cryptpad/pull/2097) @martinetd +- Typos + - Fix some typos [#2126](https://github.com/cryptpad/cryptpad/pull/2126) @josep11 + - doc: typo [#2116](https://github.com/cryptpad/cryptpad/pull/2116) @thiswillbeyourgithub + - Fix translation key errors in admin panel and installation page [#2138](https://github.com/cryptpad/cryptpad/pull/2138) +- Other + - File upload base64 caused by base64 conversion [#2181](https://github.com/cryptpad/cryptpad/pull/2181) + - Calendar export fixes [#2151](https://github.com/cryptpad/cryptpad/pull/2151) + - Fix UI overflow when loading a PDF file [#2118](https://github.com/cryptpad/cryptpad/pull/2118) + - Icon fixes [#2096](https://github.com/cryptpad/cryptpad/pull/2096) + - moderator setting on by default [#2144](https://github.com/cryptpad/cryptpad/pull/2144) + + +## Dependencies + +- Minor upgrades + - body-parser from ^1.20.2 to ^1.20.4 + - express from ~4.21.2 to ~4.22.1 + - jsonwebtoken from ^9.0.0 to ^9.0.3 + + +## Deployment and Development + +- Do not deploy Draw.io's JAR files [#2120](https://github.com/cryptpad/cryptpad/pull/2120) +- Switch to docker alpine image [#2119](https://github.com/cryptpad/cryptpad/pull/2119) +- Update triggers for end-to-end test suite [#2060](https://github.com/cryptpad/cryptpad/pull/2060) +- add Intellij directory to ignored git files [#2122](https://github.com/cryptpad/cryptpad/pull/2122) @josep11 + + +## Upgrade notes + +If you are upgrading from a version older than `2025.9.0` please read the upgrade notes of all versions between yours and `2026.2.0` to avoid configuration issues. + +To upgrade: + +1. Stop your server +2. Get the latest code with git + +```bash +git fetch --depth 1 origin tag 2026.2.0 +git checkout 2026.2.0 +npm ci +npm run install:components +./install-onlyoffice.sh +``` + +3. Restart your server +4. Review your instance's checkup page to ensure that you are passing all tests + +## Contributors + +Community: @achf01 @martinetd @josep11 @thiswillbeyourgithub + +CryptPad team: @AAAMON @Chouhartem @dariiing @davidbenque @DianaXWiki @mathilde-cryptpad @wginolas @yflory @zuzanna-maria + + # 🍁 Autumn release (2025.9.0) ## Goals diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 14539d21c..f9200716a 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -43,7 +43,7 @@ For the purposes of the document, it doesn't matter which becomes which, it must The research team at XWiki Labs created and continues to maintain a Javascript library called [Chainpad](https://github.com/xwiki-contrib/chainpad "Realtime Collaborative Editor Algorithm based on Nakamoto Blockchains") which simplifies this process, and provides a few guarantees about how differences will be resolved. The algorithm is based on Nakamoto Blockchains, a construct popularized by Bitcoin, and now a growing number of other cryptocurrencies. -The core datatype is considered a [CRDT](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type "Conflict-free Replicated Data Type). +The core datatype is considered a "Conflict-free Replicated Data Type" ([CRDT](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type)). CRDTs are also also employed by the popular source control managements software [Git](https://en.wikipedia.org/wiki/Git_%28software%29). Each patch references the [SHA-256 Hash](https://en.wikipedia.org/wiki/Secure_Hash_Algorithm "Secure Hashing Algorithms") of the previous state of the document. diff --git a/src/common/common-util.js b/src/common/common-util.js index 2704022c9..cbed9207f 100644 --- a/src/common/common-util.js +++ b/src/common/common-util.js @@ -11,11 +11,11 @@ const factory = (NaclUtil) => { window.btoa = window.btoa || function (str) { return Buffer.from(str, 'binary').toString('base64'); }; Util.encodeBase64 = u8 => { - if (typeof(u8?.toBase64) === "function") { + if (typeof (u8?.toBase64) === "function") { return u8.toBase64(); } return NaclUtil.encodeBase64(u8); - } + }; Util.decodeBase64 = str => { if (typeof(Uint8Array?.fromBase64) === "function") { return Uint8Array.fromBase64(str); diff --git a/www/common/translations/messages.de.json b/www/common/translations/messages.de.json index 8b3e5f8d7..4c9c2f82e 100644 --- a/www/common/translations/messages.de.json +++ b/www/common/translations/messages.de.json @@ -1860,5 +1860,8 @@ "password_note3": "Dein Passwort ist der geheime Schlüssel, der alle deine Dokumente und Administratorrechte auf dieser Instanz verschlüsselt.", "computer_note": "Wenn du einen gemeinsam genutzten Computer verwendest, {0}denke daran, dich abzumelden{1}, wenn du fertig bist. Durch bloßes Schließen des Browserfensters bleibt das Konto ungeschützt.", "import_note": "Um die Dokumente zu behalten, die du erstellt und/oder gespeichert hast, ohne eingeloggt zu sein, setze einen Haken bei \"Dokumente aus deiner Gast-Sitzung importieren\".", - "admin_creation_note": "Erstelle auf dieser Seite deinen ersten Administrator-Account. Administratoren verwalten die Einstellungen der Instanz einschließlich der Speicherplatzkontingente und haben Zugriff auf die Moderationswerkzeuge." + "admin_creation_note": "Erstelle auf dieser Seite deinen ersten Administrator-Account. Administratoren verwalten die Einstellungen der Instanz einschließlich der Speicherplatzkontingente und haben Zugriff auf die Moderationswerkzeuge.", + "fo_sharedFolder_move_error": "Geteilte Ordner können nicht in andere geteilte Ordner verschoben werden.", + "fo_trash_move_error": "Der Inhalt von geteilten Ordnern kann nicht in den Papierkorb verschoben werden. Verwende stattdessen \"Entfernen\".", + "form_poll_required_hint": "Die Beantwortung dieser Umfrage ist erforderlich, du musst mit mindestens einer Option interagieren." } diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 2bf7f6ac8..be8d746fd 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -1862,6 +1862,6 @@ "color8": "Violet", "loading_encrypted": "chiffré de bout en bout", "form_poll_required_hint": "Ce sondage est requis, vous devez interagir avec au moins une option.", - "fo_trash_move_error": "Le contenu d'un dossier partagé ne peut pas être déplacé dans la corbeille. Veuillez utiliser \\\"Supprimer\\\".", + "fo_trash_move_error": "Le contenu d'un dossier partagé ne peut pas être déplacé dans la corbeille. Veuillez utiliser \"Supprimer\".", "fo_sharedFolder_move_error": "Un dossier partagé ne peut pas être déplacé dans un autre dossier partagé." } diff --git a/www/common/translations/messages.json b/www/common/translations/messages.json index 869fea62f..6ecc0b5c8 100644 --- a/www/common/translations/messages.json +++ b/www/common/translations/messages.json @@ -1862,6 +1862,6 @@ "color8": "Purple", "loading_encrypted": "end-to-end encrypted", "form_poll_required_hint": "This poll is required, you must interact with at least one option.", - "fo_trash_move_error": "Shared folder contents cannot be moved to trash. Use \\\"Remove\\\" instead.", + "fo_trash_move_error": "Shared folder contents cannot be moved to trash. Use \"Remove\" instead.", "fo_sharedFolder_move_error": "Shared folders cannot be moved inside other shared folders." } diff --git a/www/common/translations/messages.pl.json b/www/common/translations/messages.pl.json index d53932519..56a8136aa 100644 --- a/www/common/translations/messages.pl.json +++ b/www/common/translations/messages.pl.json @@ -1860,5 +1860,8 @@ "color6": "Turkusowy", "color7": "Niebieski", "color8": "Fioletowy", - "loading_encrypted": "szyfrowane od końca do końca" + "loading_encrypted": "szyfrowane od końca do końca", + "form_poll_required_hint": "Ta ankieta jest obowiązkowa, należy wybrać co najmniej jedną opcję.", + "fo_trash_move_error": "Zawartości folderów współdzielonych nie można przenieść do kosza. Zamiast tego użyj opcji „Usuń”.", + "fo_sharedFolder_move_error": "Folderów współdzielonych nie można przenosić do innych folderów współdzielonych." } diff --git a/www/common/translations/messages.pt-br.json b/www/common/translations/messages.pt-br.json index d9cfda449..d8e1742fd 100644 --- a/www/common/translations/messages.pt-br.json +++ b/www/common/translations/messages.pt-br.json @@ -39,7 +39,7 @@ "upgrade": "Upgrade", "MB": "MB", "GB": "GB", - "KB": "KB", + "KB": "kB", "formattedMB": "{0} MB", "formattedGB": "{0} GB", "formattedKB": "{0} KB", diff --git a/www/common/translations/messages.ro.json b/www/common/translations/messages.ro.json index 6c8d78dc3..a82ed0d76 100644 --- a/www/common/translations/messages.ro.json +++ b/www/common/translations/messages.ro.json @@ -1860,5 +1860,8 @@ "help_close_button": "Închide notificarea de ajutor", "fc_open_formaud": "Deschide (ca auditor)", "admin_documentsDeletionTitle": "Arhivează documente multiple", - "admin_documentsDeletionHint": "Arhivează o listă de documente după id (un id per linie)" + "admin_documentsDeletionHint": "Arhivează o listă de documente după id (un id per linie)", + "form_poll_required_hint": "Această întrebare este obligatorie, trebuie să interacționați cu cel puțin o opțiune.", + "fo_trash_move_error": "Conținutul unui dosar distribuit nu poate fi mutat la gunoi. În schimb, folosiți funcția \"Elimină\".", + "fo_sharedFolder_move_error": "Dosarele distribuite nu pot fi mutate în alte dosare distribuite." } diff --git a/www/common/translations/messages.ru.json b/www/common/translations/messages.ru.json index 5091af5a3..b935ecfdd 100644 --- a/www/common/translations/messages.ru.json +++ b/www/common/translations/messages.ru.json @@ -1860,5 +1860,8 @@ "color6": "Бирюзовый", "color7": "Синий", "color8": "Фиолетовый", - "loading_encrypted": "с сквозным шифрованием" + "loading_encrypted": "с сквозным шифрованием", + "form_poll_required_hint": "Этот вопрос обязателен, Вы должны выбрать хотя бы один вариант.", + "fo_trash_move_error": "Содержимое общей папки нельзя переместить в корзину. Вместо этого используйте \"Удалить\".", + "fo_sharedFolder_move_error": "Общие папки нельзя перемещать внутрь других общих папок." } diff --git a/www/common/translations/messages.zh.json b/www/common/translations/messages.zh.json index 2883a6971..42a430f30 100644 --- a/www/common/translations/messages.zh.json +++ b/www/common/translations/messages.zh.json @@ -351,8 +351,8 @@ "uploadButtonTitle": "将新文件上传到您的 CryptDrive", "uploadFolderButton": "上传文件夹", "uploadButton": "上传文件", - "form_required_on": "必要的", - "form_required_off": "选项", + "form_required_on": "必填", + "form_required_off": "选填", "form_preview": "表格预览", "form_changeTypeConfirm": "选择新的问题类型。", "form_corruptAnswers": "此表单已经有回复。 更改此问题类型可能会使以前的响应数据无效。", @@ -1860,5 +1860,8 @@ "password_note3": "您的密码是加密此实例上所有文档和管理员权限的密钥。", "computer_note": "如果您使用的是共享计算机,{0}请记住在操作完成后登出{1}。仅关闭浏览器窗口会导致账号暴露。", "import_note": "要保留您在未登录的情况下创建和/或存储的文档,请勾选“从访客会话导入文档”。", - "admin_creation_note": "在此页面创建首个管理员账号。管理员可管理实例设置,包括存储配额,并有权使用审核工具。" + "admin_creation_note": "在此页面创建首个管理员账号。管理员可管理实例设置,包括存储配额,并有权使用审核工具。", + "form_poll_required_hint": "此投票为必选项,您必须至少选择一个选项。", + "fo_trash_move_error": "共享文件夹内容无法移至回收站,请改用“移除”。", + "fo_sharedFolder_move_error": "共享文件夹无法移至其他共享文件夹内。" }