diff --git a/app/mailers/project_mailer.rb b/app/mailers/project_mailer.rb index e1eb87766d25..543f4c863636 100644 --- a/app/mailers/project_mailer.rb +++ b/app/mailers/project_mailer.rb @@ -27,13 +27,14 @@ #++ class ProjectMailer < ApplicationMailer - def delete_project_completed(project, user:) + def delete_project_completed(project, user:, dependent_projects: []) open_project_headers Project: project.identifier, Author: user.login message_id project, user with_locale_for(user) do @project = project + @dependent_projects = dependent_projects mail to: user.mail, subject: I18n.t('projects.delete.completed', name: project.name) end end diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 357a77a4da1c..ad7295f9d7e9 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -589,7 +589,7 @@ def mail_as_hash(email) subject: email.subject, from: email.from&.first || '(unknown from address)', quote: incoming_email_quote(email), - text: incoming_email_text(email) + text: plain_text_body || incoming_email_text(email) } end diff --git a/app/services/projects/delete_service.rb b/app/services/projects/delete_service.rb index 224b2fa15278..9ad03d8093ac 100644 --- a/app/services/projects/delete_service.rb +++ b/app/services/projects/delete_service.rb @@ -30,6 +30,16 @@ module Projects class DeleteService < ::BaseServices::Delete include Projects::Concerns::UpdateDemoData + ## + # Reference to the dependent projects that we're deleting + attr_accessor :dependent_projects + + def initialize(user:, model:, contract_class: nil, contract_options: {}) + self.dependent_projects = model.descendants.to_a # Store an Array instead of a Project::ActiveRecord_Relation + + super + end + def call(*) super.tap do |service_call| notify(service_call.success?) @@ -68,7 +78,7 @@ def destroy_all_work_packages def notify(success) if success - ProjectMailer.delete_project_completed(model, user:).deliver_now + ProjectMailer.delete_project_completed(model, user:, dependent_projects:).deliver_now else ProjectMailer.delete_project_failed(model, user:).deliver_now end diff --git a/app/views/custom_styles/_inline_css.erb b/app/views/custom_styles/_inline_css.erb index 13aa4a1e9e05..63ca363a8a2a 100644 --- a/app/views/custom_styles/_inline_css.erb +++ b/app/views/custom_styles/_inline_css.erb @@ -38,7 +38,7 @@ See COPYRIGHT and LICENSE files for more details. --main-menu-border-width: 1px; <% end %> <% if design_color.variable == "alternative-color" %> - --button--alt-highlight-background-hover-color: <%= design_color.darken 0.82 %>; + --button--alt-highlight-background-hover-color: <%= design_color.darken 0.18 %>; <% end %> <% if design_color.variable == "primary-color" %> --primary-color--minor1: <%= design_color.lighten 0.3 %>; diff --git a/app/views/project_mailer/delete_project_completed.html.erb b/app/views/project_mailer/delete_project_completed.html.erb index f3af4c1355b3..6d6439af8fdd 100644 --- a/app/views/project_mailer/delete_project_completed.html.erb +++ b/app/views/project_mailer/delete_project_completed.html.erb @@ -29,4 +29,15 @@ See COPYRIGHT and LICENSE files for more details.

<%= @project.name %>

-

<%= t('projects.delete.completed_text', name: @project.name) %>

+

+ <%= t('projects.delete.completed_text', name: @project.name) %> + <% if @dependent_projects.any? %> +
+ <%= t('projects.delete.completed_text_children') %> +

+ <% end %> +

diff --git a/app/views/project_mailer/delete_project_completed.text.erb b/app/views/project_mailer/delete_project_completed.text.erb index 23222074c548..b391482ef3a0 100644 --- a/app/views/project_mailer/delete_project_completed.text.erb +++ b/app/views/project_mailer/delete_project_completed.text.erb @@ -31,3 +31,12 @@ See COPYRIGHT and LICENSE files for more details. <%= project_url(@project) %> <%= t('projects.delete.completed_text', name: @project.name) %> + +<% if @dependent_projects.any? %> + <%= t('projects.delete.completed_text_children') %> + + <% @dependent_projects.each do |subproject| %> + - <%= subproject.name %> + <%= project_url(subproject) %> + <% end %> +<% end %> diff --git a/config/locales/crowdin/af.yml b/config/locales/crowdin/af.yml index e3db2369035e..3bfcc095b7e9 100644 --- a/config/locales/crowdin/af.yml +++ b/config/locales/crowdin/af.yml @@ -232,6 +232,7 @@ af: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml index f996f2e859fd..9d7cc49a869e 100644 --- a/config/locales/crowdin/ar.yml +++ b/config/locales/crowdin/ar.yml @@ -232,6 +232,7 @@ ar: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/az.yml b/config/locales/crowdin/az.yml index fa9dc65d7e34..9196fb5ddd2b 100644 --- a/config/locales/crowdin/az.yml +++ b/config/locales/crowdin/az.yml @@ -232,6 +232,7 @@ az: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/be.yml b/config/locales/crowdin/be.yml index 23cfb2c1170e..45750ea586e0 100644 --- a/config/locales/crowdin/be.yml +++ b/config/locales/crowdin/be.yml @@ -232,6 +232,7 @@ be: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml index 4a896e18a6a4..a6205975af88 100644 --- a/config/locales/crowdin/bg.yml +++ b/config/locales/crowdin/bg.yml @@ -232,6 +232,7 @@ bg: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Отваря се като изглед на Гант' open_as_gantt_title: "Използвайте този бутон, за да генерирате изглед на Гант, който филтрира работни пакети за проектите, видими на тази страница." diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml index 16e7834191c6..a48a745fa4f0 100644 --- a/config/locales/crowdin/ca.yml +++ b/config/locales/crowdin/ca.yml @@ -229,6 +229,7 @@ ca: failed_text: "La petició per a eliminar el projecte %{name} ha fallat. El projecte s'ha arxivat." completed: "S'ha completat l'eliminació del projecte %{name}" completed_text: "La petició d'eliminació del projecte '%{name}' s'ha completat." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Obre com a diagrama de Gantt' open_as_gantt_title: "Utilitza aquest botó per a generar un diagrama de Gantt que filtra paquets de treball pels projectes visibles en aquesta pàgina." diff --git a/config/locales/crowdin/ckb-IR.yml b/config/locales/crowdin/ckb-IR.yml index 985b69b2c85d..6c7c19fff66a 100644 --- a/config/locales/crowdin/ckb-IR.yml +++ b/config/locales/crowdin/ckb-IR.yml @@ -232,6 +232,7 @@ ckb-IR: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml index 964a099c4e17..66acdf158425 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -232,6 +232,7 @@ cs: failed_text: "Požadavek na smazání projektu %{name} se nezdařil. Projekt zůstal archivován." completed: "Smazání projektu %{name} dokončeno" completed_text: "Požadavek na smazání projektu '%{name}' byl dokončen." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Otevřít jako Gantt diagram' open_as_gantt_title: "Použijte toto tlačítko pro generování Ganttova zobrazení, které filtruje pracovní balíčky pro projekty viditelné na této stránce." diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml index 3d326aad8c38..e70baa6c3cbb 100644 --- a/config/locales/crowdin/da.yml +++ b/config/locales/crowdin/da.yml @@ -230,6 +230,7 @@ da: failed_text: "Anmodningen om at slette projektet %{name} mislykkedes. Projektet blev arkiveret." completed: "Sletning af projektet %{name} udført" completed_text: "Anmodningen om at slette projektet '%{name}' er gennemført." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml index 2eb8e630c0b7..469e7048f406 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -229,6 +229,7 @@ de: failed_text: "Die Anfrage zum Löschen des Projekts %{name} ist fehlgeschlagen. Das Projekt wurde archiviert." completed: "Löschen des Projekts %{name} abgeschlossen" completed_text: "Die Anfrage zum Löschen des Projekts '%{name}' wurde abgeschlossen." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Als Gantt-Ansicht öffnen' open_as_gantt_title: "Eine Gantt-Ansicht für Arbeitspakete aus den auf dieser Seite sichtbaren Projekten erzeugen." diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml index fd0c5749a278..a57ebf274d2d 100644 --- a/config/locales/crowdin/el.yml +++ b/config/locales/crowdin/el.yml @@ -228,6 +228,7 @@ el: failed_text: "Το αίτημα για διαγραφή του έργου %{name} απέτυχε. Το έργο παρέμεινε αρχειοθετημένο." completed: "Η διαγραφή του έργου %{name} ολοκληρώθηκε" completed_text: "Το αίτημα για διαγραφή του έργου %{name} έχει ολοκληρωθεί." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Άνοιγμα ως προβολή Gantt' open_as_gantt_title: "Χρησιμοποιήστε αυτό το κουμπί για να δημιουργήσετε μια προβολή Gantt που φιλτράρει τα πακέτα εργασίας για τα έργα που εμφανίζονται σε αυτή τη σελίδα." diff --git a/config/locales/crowdin/eo.yml b/config/locales/crowdin/eo.yml index b59d00f89d7d..7080c3b89509 100644 --- a/config/locales/crowdin/eo.yml +++ b/config/locales/crowdin/eo.yml @@ -232,6 +232,7 @@ eo: failed_text: "La peto por forigi la projekton %{name} malsukcesis. La projekto estis arkivita." completed: "Forigo de la projekto %{name} estis kompletigita" completed_text: "La peto por forigi la projekton %{name} estis kompletigita." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml index 64afd4e09e4f..27774f125858 100644 --- a/config/locales/crowdin/es.yml +++ b/config/locales/crowdin/es.yml @@ -229,6 +229,7 @@ es: failed_text: "La petición de borrado del proyecto %{name} ha fallado. El proyecto ha sido archivado." completed: "Borrado del proyecto %{name} completado" completed_text: "La petición para borrar el proyecto '%{name}' se ha completado." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Abrir como diagrama de Gantt' open_as_gantt_title: "Use este botón para generar un diagrama de Gantt donde se filtren los paquetes de trabajo de los proyectos visibles en esta página." diff --git a/config/locales/crowdin/et.yml b/config/locales/crowdin/et.yml index 2450d5e9e8fc..1d4acd6bc95a 100644 --- a/config/locales/crowdin/et.yml +++ b/config/locales/crowdin/et.yml @@ -232,6 +232,7 @@ et: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/eu.yml b/config/locales/crowdin/eu.yml index d382c420418c..cd44bc3cf32c 100644 --- a/config/locales/crowdin/eu.yml +++ b/config/locales/crowdin/eu.yml @@ -232,6 +232,7 @@ eu: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/fa.yml b/config/locales/crowdin/fa.yml index 91ec8a450ec6..403d3e14d4f7 100644 --- a/config/locales/crowdin/fa.yml +++ b/config/locales/crowdin/fa.yml @@ -232,6 +232,7 @@ fa: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml index d569527ba58f..68310323d52b 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -232,6 +232,7 @@ fi: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Avaa Gantt-näkymässä' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml index 4f998c2b0c3c..641b95dcaacf 100644 --- a/config/locales/crowdin/fil.yml +++ b/config/locales/crowdin/fil.yml @@ -232,6 +232,7 @@ fil: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index 88878057f514..9df43323398c 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -232,6 +232,7 @@ fr: failed_text: "La demande de suppression du projet %{name} a échoué. Le projet a été archivé." completed: "Suppression du projet %{name} terminée" completed_text: "La demande de suppression du projet '%{name}' a été terminée." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Ouvrir comme vue Gantt' open_as_gantt_title: "Utilisez ce bouton pour générer une vue Gantt qui filtre les lots de travaux des projets visibles sur cette page." diff --git a/config/locales/crowdin/he.yml b/config/locales/crowdin/he.yml index a4eef1cc9407..8db34894c282 100644 --- a/config/locales/crowdin/he.yml +++ b/config/locales/crowdin/he.yml @@ -232,6 +232,7 @@ he: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/hi.yml b/config/locales/crowdin/hi.yml index a2990129a7ea..d0833a5d21f0 100644 --- a/config/locales/crowdin/hi.yml +++ b/config/locales/crowdin/hi.yml @@ -232,6 +232,7 @@ hi: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml index ec7fe1d24734..737b588f1e59 100644 --- a/config/locales/crowdin/hr.yml +++ b/config/locales/crowdin/hr.yml @@ -232,6 +232,7 @@ hr: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml index 1780bf5bf299..d64fd9d859e5 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -231,6 +231,7 @@ hu: failed_text: "A projekt%{name} törlése sikertelen. A projekt archiválva van." completed: "A projekt %{name} törlölve" completed_text: "A projekt%{name} törlése sikeres." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Gantt nézet megnyitása' open_as_gantt_title: "Használja ezt a gombot hogy egy szűrt Gantt nézetet generáljon a projekthez" diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml index 7dc38939f901..874de1a2b577 100644 --- a/config/locales/crowdin/id.yml +++ b/config/locales/crowdin/id.yml @@ -226,6 +226,7 @@ id: failed_text: "Permintaan untuk menghapus proyek %{name} telah gagal. Proyek dibiarkan diarsipkan." completed: "Penghapusan proyek %{name} selesai" completed_text: "Permintaan untuk menghapus proyek '%{name}' telah selesai." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Buka sebagai tampilan Gantt' open_as_gantt_title: "Gunakan tombol ini untuk membuat tampilan Gantt yang memfilter paket kerja untuk proyek yang terlihat di halaman ini." diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml index 6a0c9a207e11..54830e3c5c32 100644 --- a/config/locales/crowdin/it.yml +++ b/config/locales/crowdin/it.yml @@ -229,6 +229,7 @@ it: failed_text: "La richiesta di eliminare il progetto %{name} non è riuscita. Il progetto è stato lasciato in archivio." completed: "Eliminazione del progetto %{name} completata" completed_text: "La richiesta di cancellare il progetto '%{name}' è stata completata." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Apri come vista Gantt' open_as_gantt_title: "Usa questo pulsante per generare una vista Gantt che filtra le macro-attività per i progetti visibili in questa pagina." diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml index 723c0e0b100f..b09e5f7ba9ac 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -137,7 +137,7 @@ ja: onthefly_register: | チェックを入れると、OpenProjectは初回認証時に自動的にLDAPエントリーに新規ユーザー登録します。LDAPの既存ユーザーのみ許可する場合はチェックを外してください。 connection_encryption: '接続の暗号化' - encryption_details: 'LDAPS / STARTTLS options' + encryption_details: 'LDAPS / STARTLSオプション' system_account: 'システムアカウント' system_account_legend: | OpenProject は、LDAP ツリー内のユーザーとグループを検索するために、システムアカウントを介して読み取り専用アクセスを必要とします。 @@ -230,6 +230,7 @@ ja: failed_text: "プロジェクト%{name} の削除要求が失敗しました。 プロジェクトはアーカイブされたままです。" completed: "プロジェクト%{name} の削除が完了しました" completed_text: "プロジェクト '%{name}'を削除要求は完了しました。" + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'ガントビューとして開く' open_as_gantt_title: "このボタンを使用して、このページに表示されているプロジェクトのワークパッケージをフィルタリングするガントビューを生成します。" @@ -1420,7 +1421,7 @@ ja: admin: mail_notification: "電子メールの通知" mails_and_notifications: "Emails and notification" - aggregation: 'Aggregation' + aggregation: '集計' api_and_webhooks: "API and webhooks" quick_add: label: "クイック追加メニューを開く" @@ -2263,8 +2264,8 @@ ja: permission_export_work_packages: "ワークパッケージのエクスポート" permission_export_wiki_pages: "Wikiページのエクスポート" permission_list_attachments: "添付ファイルの一覧表" - permission_log_own_time: "Log own time" - permission_log_time: "Log time for other users" + permission_log_own_time: "作業時間の記録" + permission_log_time: "他のユーザーの作業時間" permission_manage_forums: "フォーラムの管理" permission_manage_categories: "仕事項目のカテゴリの管理" permission_manage_work_package_relations: "ワークパッケージの関係の管理" @@ -2940,7 +2941,7 @@ ja: warning_bar: https_mismatch: - title: 'HTTPS mode setup mismatch' + title: 'HTTPS モードのセットアップが一致しません' text_html: > Your application is running with HTTPS mode set to %{set_protocol}, but the request is an %{actual_protocol} request. This will result in errors! You will need to set the following configuration value: %{setting_value}. Please see the installation documentation on how to set this configuration. hostname_mismatch: diff --git a/config/locales/crowdin/js-ja.yml b/config/locales/crowdin/js-ja.yml index 9728dfda4645..30c46f4b0837 100644 --- a/config/locales/crowdin/js-ja.yml +++ b/config/locales/crowdin/js-ja.yml @@ -225,7 +225,7 @@ ja: status_label: "ステータス:" status_confirmed: "確認済み" status_waiting: "メールが送信されました - 確認待ちです" - test_ee: "Test the Enterprise edition 14 days for free" + test_ee: "エンタープライズ版を14日間無料でテストする" quick_overview: "Get a quick overview of project management and team collaboration with OpenProject Enterprise edition." upsale: become_hero: "ヒーローになろう!" @@ -237,7 +237,7 @@ ja: high_security_text: "Single sign on (SAML, OpenID Connect, CAS), LDAP groups." installation: "インストールサポート" installation_text: "経験豊富なソフトウェアエンジニアが、あなた独自のインフラストラクチャへの完全なインストールとセットアッププロセスをガイドします。" - premium_features: "Enterprise add-ons" + premium_features: "エンタープライズアドオン" premium_features_text: "アジャイルボード、カスタムテーマとロゴ、グラフ、カスタムアクションによるインテリジェントワークフロー、ワークパッケージの添付ファイルおよびマルチセレクトカスタムフィールドの全文検索。" professional_support: "プロフェッショナルサポート" professional_support_text: "ビジネスクリティカルな環境での OpenProject 利用に関する専門知識を持つ上級サポートエンジニアから、信頼性の高いハイタッチサポートを受けましょう。" @@ -248,7 +248,7 @@ ja: confidence: > テストおよびサポートされているエンタープライズクラスのプロジェクト管理ソフトウェアの信頼性を提供します。オープンソースとオープンマインドとともに。 link_quote: "見積もりの入手" - more_info: "More information" + more_info: "詳細情報" text: > The OpenProject Enterprise edition builds on top of the Community edition. It includes Enterprise add-ons and professional support mainly aimed at organizations with more than 10 users that manage business critical projects with OpenProject. unlimited: "無制限" @@ -389,7 +389,7 @@ ja: label_in_more_than: "今日から○日後以降" label_incoming_emails: "受信メール" label_information_plural: "情報" - label_invalid: "Invalid" + label_invalid: "無効" label_import: "インポート" label_latest_activity: "最新の活動" label_last_updated_on: "最終更新日:" @@ -553,9 +553,9 @@ ja: watched: 'watcher' assigned: 'assignee' responsible: 'accountable' - created: 'created' - scheduled: 'scheduled' - commented: 'commented' + created: '作成する' + scheduled: 'スケジュール済' + commented: 'コメント' processed: 'processed' prioritized: 'prioritized' dateAlert: 'Date alert' diff --git a/config/locales/crowdin/js-sr.yml b/config/locales/crowdin/js-sr.yml index e769b147ca64..b04f1ea17fa4 100644 --- a/config/locales/crowdin/js-sr.yml +++ b/config/locales/crowdin/js-sr.yml @@ -93,7 +93,7 @@ sr: button_save: "Save" button_settings: "Settings" button_uncheck_all: "Uncheck all" - button_update: "Update" + button_update: "Ažuriranje" button_export-pdf: "Download PDF" button_export-atom: "Download Atom" button_create: "Create" diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 705700fabcf3..f637d3a206a5 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -232,6 +232,7 @@ ko: failed_text: "프로젝트 %{name} 삭제 요청이 실패했습니다. 프로젝트가 보관되었습니다." completed: "프로젝트 %{name} 삭제가 완료되었습니다." completed_text: "프로젝트 '%{name}' 삭제 요청이 완료되었습니다." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Gantt 보기로 열기' open_as_gantt_title: "이 버튼을 사용하여 이 페이지에 표시되는 프로젝트에 대한 작업 패키지를 필터링하는 Gantt 보기를 생성하세요." diff --git a/config/locales/crowdin/lol.yml b/config/locales/crowdin/lol.yml index 71eaaf7d21e7..04b531749397 100644 --- a/config/locales/crowdin/lol.yml +++ b/config/locales/crowdin/lol.yml @@ -220,6 +220,7 @@ lol: failed_text: "crwdns796558:0%{name}crwdne796558:0" completed: "crwdns796560:0%{name}crwdne796560:0" completed_text: "crwdns796562:0%{name}crwdne796562:0" + completed_text_children: "crwdns850271:0crwdne850271:0" index: open_as_gantt: 'crwdns796564:0crwdne796564:0' open_as_gantt_title: "crwdns796566:0crwdne796566:0" diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml index 26251f537df3..96f5fed21ddc 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -229,6 +229,7 @@ lt: failed_text: "Projekto %{name} užsakytas naikinimas nepavyko. Projektas liko suarchyvuotas." completed: "Projekto %{name} naikinimas baigtas" completed_text: "Prašymas naikinti projektą „%{name}“ buvo užbaigtas." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Atidaryti kaip Gantt diagramą' open_as_gantt_title: "Naudokite šį mygtuką visų šiame puslapyje matomų projektų darbo užduočių Gantt'o diagramai sugeneruoti." diff --git a/config/locales/crowdin/lv.yml b/config/locales/crowdin/lv.yml index 99c86a240016..0c2abddc66d9 100644 --- a/config/locales/crowdin/lv.yml +++ b/config/locales/crowdin/lv.yml @@ -232,6 +232,7 @@ lv: failed_text: "Pieprasījums dzēst projektu %{name} neizdevās. Projekts palika arhivēts." completed: "Projekta %{name} ir izdevusies" completed_text: "Pieprasījums dzēst projektu %{name} ir pabeigts." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/mn.yml b/config/locales/crowdin/mn.yml index ceba72f36806..b6c9a3bedd08 100644 --- a/config/locales/crowdin/mn.yml +++ b/config/locales/crowdin/mn.yml @@ -232,6 +232,7 @@ mn: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/ne.yml b/config/locales/crowdin/ne.yml index 3c3459d82f3a..addfacbca024 100644 --- a/config/locales/crowdin/ne.yml +++ b/config/locales/crowdin/ne.yml @@ -232,6 +232,7 @@ ne: failed_text: "परियोजना '%{name}' मेटाउने अनुरोध असफल भयो। परियोजना संग्रहित अवस्थामा छ।" completed: "परियोजना '%{name}' मेटाउने कार्य पुरा भयो" completed_text: "परियोजना '%{name}' मेट्ने अनुरोध पुरा भयो।" + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml index c56a13a73b95..b472fd6d5d0d 100644 --- a/config/locales/crowdin/nl.yml +++ b/config/locales/crowdin/nl.yml @@ -229,6 +229,7 @@ nl: failed_text: "Het verzoek om het project %{name} verwijderen is mislukt. Het project is gearchiveerd gebleven." completed: "Verwijderen van project %{name} is gelukt" completed_text: "Het verzoek om het verwijderen van project '%{name}' is voltooid." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open als Gantt weergave' open_as_gantt_title: "Gebruik deze knop om een Gantt-weergave te genereren die werkpakketten filtert voor de projecten die op deze pagina zichtbaar zijn." diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index a8e982908be2..6b4e2f01ab3b 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -232,6 +232,7 @@ failed_text: "Forespørselen om å slette prosjektet %{name} mislyktes. Prosjektet ble satt som arkivert." completed: "Sletting av prosjektet %{name} er fullført" completed_text: "Forespørselen om å slette prosjektet '%{name}' er fullført." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml index de768d8f5e7a..a81dae712a0c 100644 --- a/config/locales/crowdin/pl.yml +++ b/config/locales/crowdin/pl.yml @@ -229,6 +229,7 @@ pl: failed_text: "Żądanie usunięcia projektu %{name} nie powiodło się. Projekt pozostał zarchiwizowany." completed: "Usunięcie projektu %{name} zostało wykonane" completed_text: "Żądanie usunięcia projektu „%{name}” zostało wykonane." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Otwórz jako widok wykresu Gantta' open_as_gantt_title: "Użyj tego przycisku, aby wygenerować widok wykresu Gantta, który filtruje pakiety robocze projektów widocznych na tej stronie." diff --git a/config/locales/crowdin/pt.yml b/config/locales/crowdin/pt.yml index 1d6992ceed38..c873bdbcb164 100644 --- a/config/locales/crowdin/pt.yml +++ b/config/locales/crowdin/pt.yml @@ -231,6 +231,7 @@ pt: failed_text: "A solicitação para excluir o projeto %{name} falhou. O projeto foi arquivado." completed: "Exclusão do projeto %{name} concluída" completed_text: "Foi concluída a solicitação para exclusão do projeto '%{name}'." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Abrir como visualização Gantt' open_as_gantt_title: "Use este botão para gerar uma exibição Gantt que filtra pacotes de trabalho para projetos visíveis nesta página." diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index af6f5cf1dc20..a0e4fafb7798 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -232,6 +232,7 @@ ro: failed_text: "Solicitarea de ștergere a proiectului %{name} a eșuat. Proiectul a rămas arhivat." completed: "Ștergerea proiectului %{name} finalizată" completed_text: "Cererea de ștergere a proiectului \"%{name}\" a fost finalizată." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Deschideți ca vizualizare Gantt' open_as_gantt_title: "Utilizați acest buton pentru a genera o vizualizare Gantt care filtrează pachetele de lucru pentru proiectele vizibile pe această pagină." diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 1e63955691b8..a7a878db7342 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -231,6 +231,7 @@ ru: failed_text: "Запрос на удаление проекта %{name} не удался. Проект был оставлен в архиве." completed: "Удаление проекта %{name} завершено" completed_text: "Запрос на удаление проекта '%{name}' был завершен." + completed_text_children: "Кроме того, были удалены следующие подпроекты:" index: open_as_gantt: 'Открыть в виде диаграммы Ганта' open_as_gantt_title: "Используйте эту кнопку для создания представления Ганта, фильтрующего пакеты работ, видимых на этой странице." diff --git a/config/locales/crowdin/rw.yml b/config/locales/crowdin/rw.yml index 3d62893b9e6c..fb13981ab3d4 100644 --- a/config/locales/crowdin/rw.yml +++ b/config/locales/crowdin/rw.yml @@ -232,6 +232,7 @@ rw: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/si.yml b/config/locales/crowdin/si.yml index 864fe4f03852..a805bd9ce5b4 100644 --- a/config/locales/crowdin/si.yml +++ b/config/locales/crowdin/si.yml @@ -232,6 +232,7 @@ si: failed_text: "ව්යාපෘතිය %{name} මකා දැමීමේ ඉල්ලීම අසාර්ථක වී ඇත. මෙම ව්යාපෘතිය සංරක්ෂණය කර ඇත." completed: "ව්යාපෘතිය මකාදැමීම %{name} අවසන්" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml index c067cf298276..af7e759b69d0 100644 --- a/config/locales/crowdin/sk.yml +++ b/config/locales/crowdin/sk.yml @@ -232,6 +232,7 @@ sk: failed_text: "Požiadavka na odstránenie projektu %{name} zlyhala. Projekt zostal archivovaný." completed: "Odstránenie projektu %{name} dokončené" completed_text: "Požiadavka na odstránenie projektu '%{name}' bola ukončená." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml index e44e7bf35967..957d9a589f14 100644 --- a/config/locales/crowdin/sl.yml +++ b/config/locales/crowdin/sl.yml @@ -231,6 +231,7 @@ sl: failed_text: "Zahteva za izbris projekta %{name} ni uspela. Projekt je ostal arhiviran." completed: "Projekt %{name} izbrisan" completed_text: "Zahteva za izbris projekta '%{name}' je zaključena." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Odpri kot gantogram' open_as_gantt_title: "Uporabi ta gumb za izdelavo gantograma, ki filtrira delovne pakete za projekte vidne na tej strani." diff --git a/config/locales/crowdin/sr.yml b/config/locales/crowdin/sr.yml index 4556e144e4f3..f4afa7ef4182 100644 --- a/config/locales/crowdin/sr.yml +++ b/config/locales/crowdin/sr.yml @@ -232,6 +232,7 @@ sr: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml index 014a2fb9d950..6af61aa62c02 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -232,6 +232,7 @@ sv: failed_text: "Begäran om att ta bort projekt %{name} misslyckades. Projektet lämnades arkiverat." completed: "Borttagning av projekt %{name} slutfört" completed_text: "Begäran om att ta bort projekt '%{name}' har slutförts." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/th.yml b/config/locales/crowdin/th.yml index c8efed71007d..5468d527b756 100644 --- a/config/locales/crowdin/th.yml +++ b/config/locales/crowdin/th.yml @@ -232,6 +232,7 @@ th: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml index 2633e339b234..ddd0259e6ced 100644 --- a/config/locales/crowdin/tr.yml +++ b/config/locales/crowdin/tr.yml @@ -232,6 +232,7 @@ tr: failed_text: "%{name} projesini silme isteği başarısız oldu. Proje arşivlendi." completed: " %{name} projesinin silinmesi tamamlandı" completed_text: "'%{name}' projesini silme isteği tamamlandı." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Gantt görünümü olarak aç' open_as_gantt_title: "Bu sayfada görünen projeler için iş paketlerini filtreleyen bir Gantt görünümü oluşturmak için bu düğmeyi kullanın." diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index 9d4fd4668d34..bb66acb86122 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -227,6 +227,7 @@ uk: failed_text: "Запит видалення проекту %{name} не вдало. Проект залишився в архіві." completed: "Видалення проекту %{name} завершено." completed_text: "Запит видалення проекту '%{name}' завершено." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Відкрити в поданні Ґанта' open_as_gantt_title: "Натисніть цю кнопку, щоб створити подання Ґанта, у якому фільтруються пакети робіт для проєктів, видимих на цій сторінці." diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml index f3eaaaff8fe2..39f1c4139818 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -234,6 +234,7 @@ vi: failed_text: "Yêu cầu xóa dự án %{name} đã thất bại. Dự án đã được lưu trữ." completed: "Đã xóa dự án %{name}" completed_text: "Yêu cầu xóa dự án '%{name}' đã được hoàn thành." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index 29d4539f2d64..f626edd0eb6f 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -232,6 +232,7 @@ zh-TW: failed_text: "刪除專案 %{name} 的請求失敗。該專案已封存。" completed: "專案 %{name} 已完成刪除" completed_text: "刪除專案 \"%{name}\" 的請求已經完成。" + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: '以甘特圖打開' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/config/locales/en.yml b/config/locales/en.yml index eabbccc7c364..f167f49f0e9f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -262,6 +262,7 @@ en: failed_text: "The request to delete project %{name} has failed. The project was left archived." completed: "Deletion of project %{name} completed" completed_text: "The request to delete project '%{name}' has been completed." + completed_text_children: "Additionally, the following subprojects have been deleted:" index: open_as_gantt: 'Open as Gantt view' open_as_gantt_title: "Use this button to generate a Gantt view that filters work packages for the projects visible on this page." diff --git a/db/migrate/20221202130039_fill_project_journals_with_existing_data.rb b/db/migrate/20221202130039_fill_project_journals_with_existing_data.rb index e4c4d8c22147..3f87957d3211 100644 --- a/db/migrate/20221202130039_fill_project_journals_with_existing_data.rb +++ b/db/migrate/20221202130039_fill_project_journals_with_existing_data.rb @@ -1,5 +1,6 @@ class FillProjectJournalsWithExistingData < ActiveRecord::Migration[7.0] def up + make_sure_journals_notes_is_nullable # On some user instances, invalid custom values were encountered. Those # custom_values belonged to projects which had been deleted in the meantime. delete_invalid_custom_values @@ -12,6 +13,10 @@ def down private + def make_sure_journals_notes_is_nullable + change_column_null(:journals, :notes, true) + end + def create_journal_entries_for_projects sql = <<~SQL.squish WITH project_journals_insertion AS ( diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md index dc1c555afb15..a220218dc8df 100644 --- a/docs/installation-and-operations/installation/manual/README.md +++ b/docs/installation-and-operations/installation/manual/README.md @@ -230,12 +230,12 @@ To configure the environment variables such as the number of web server threads [openproject@host] RAILS_ENV="production" ./bin/rake assets:precompile ``` -> **NOTE:** When not specified differently, the default data loaded via db:seed will have an english localization. You can choose to seed in a different language by specifying the language via the `LOCALE` environment variable on the call to `db:seed`. E.g. +> **NOTE:** When not specified differently, the default data loaded via db:seed will have an english localization. You can choose to seed in a different language by specifying the language via the `OPENPROJECT_SEED_LOCALE` environment variable on the call to `db:seed`. E.g. ```bash [openproject@all] RAILS_ENV="production" OPENPROJECT_SEED_LOCALE=fr ./bin/rake db:seed ``` -will seed the database in the french language. A large portion of the seed data is only available in english, however. +will seed the database in the French language. A large portion of the seed data is only available in English, however. ### Secret token diff --git a/docs/release-notes/12-5-0/README.md b/docs/release-notes/12-5-0/README.md index 447f82c779bf..be8abb0d66e8 100644 --- a/docs/release-notes/12-5-0/README.md +++ b/docs/release-notes/12-5-0/README.md @@ -10,15 +10,16 @@ release_date: 2023-03-20 Release date: 2023-03-20 -We released [OpenProject 12.5.0](https://community.openproject.com/versions/1611). +We have released [OpenProject 12.5.0](https://community.openproject.com/versions/1611). + This new release is again packed with many new collaboration features, improvements and bug fixes. -The release will bring the anticipated collaboration features for the **Nextcloud integration to the OpenProject side**. Nextcloud and OpenProject now offer mutual customers a way to manage their projects and share files seamlessly and without disruption. +Version 12.5 brings the anticipated collaboration features for the **Nextcloud integration to the OpenProject side**. Nextcloud and OpenProject now offer users of both services a way to manage their projects and share files seamlessly and without disruption. -Moreover, with OpenProject 12.5, the system administrator can **set additional non-working days** on an instance level, such as public holidays. Also, we are happy to **publish another Enterprise add-on**: The Advanced search functionality not only supports full text search but also enables users to search for work package attachments or content. It is now a part of the free-of-charge Community version. +OpenProject 12.5 now also lets system administrator **define additional non-working days** on an instance level, such as public holidays. We are also happy to **release another Enterprise add-on** to the free-of-charge Community version: The advanced search functionality not only supports full text search but also enables users to search for work package attachments or content. ## Upload files to Nextcloud while working in OpenProject -OpenProject 12.5 launches the next step for the OpenProject and Nextcloud integration. It is now possible to upload new files and link them directly from a work package in OpenProject to your Nextcloud file storage. The close connection of work packages with project-related files combines the advantages of both open source systems. +OpenProject 12.5 launches the next step for the integration between OpenProject and Nextcloud. It is now possible to upload new files to Nextcloud and link them directly to a work package all from within OpenProject. The close connection of work packages with project-related files combines the advantages of both open source systems. Different use cases are covered for uploading and linking files directly from within a work package. @@ -30,77 +31,75 @@ To do so, start by clicking on **Link existing files** underneath the section of ![openproject-nextcloud-files-link](openproject-nextcloud-files-link.png) -### New file picker in OpenProject +### A new file picker in OpenProject -A new file picker will appear, displaying all the files and folders on your Nextcloud instance that you have permission to see. You can choose the respective file or folder from Nextcloud via the file picker. +A new file picker will appear, displaying all the files and folders on your Nextcloud instance that you have permission to see. ![openproject-nextcloud-files-picker](openproject-nextcloud-files-picker.png) -To link a certain file or folder with this work package, click on the checkbox to the left of each item. Once you have selected the file(s) or folder(s) you wish to link to the work package, click on the **Link files** button. The number on the button will represent the number of files/folders you have selected. +To link a certain file or folder with this work package, click on the checkbox to the left of each item. Once you have selected the relevant file(s) or folder(s), click on the **Link files** button. The number on the button will represent the number of files/folders you have selected. -### Upload a new file while working in OpenProject +### Upload a new file to Nextcloud directly from OpenProject It is now possible to upload a new file from your device directly to Nextcloud from within an OpenProject work package. -In this case, the file you want to link has not yet been uploaded to Nextcloud. Hence, click on the **Upload files** link. You will then be prompted to select a file (or multiple files) on your computer that you want to upload to Nextcloud. +Click on the **Upload files** link. You will be prompted to select a file (or multiple files) on your computer that you want to upload to Nextcloud and link the the current work package, in one action. Alternatively, you can also simply drag a file or folder on your computer to this area (under the name of your Nextcloud file storage) and drop it in the drop zone that appears. -Once you have selected or dropped the files you would like to upload, you will need to select a folder on Nextcloud to which they should be stored. - -To save the files you uploaded to the current folder in Nextcloud, click on the **Choose location** button. +Once you have selected or dropped the files you would like to upload, simply select a folder on Nextcloud in which they should be stored and click the **Choose location** button. ![openproject-nextcloud-upload](openproject-nextcloud-upload.gif) -### Upload files during creation of a new work package +### Upload files during when creating new work package + +The ability to upload new files to Nextcloud directly from OpenProject or link existing files to work packages is not reserved only for existing work packages. You can now do both also when creating a new work package. -If you create a new work package in OpenProject and want to add a file to the work package, you can now upload or link files from Nextcloud directly. -Thereby, it gives you two options: upload a new file or link an existing file from Nextcloud, as described above. ![openproject-nextcloud-upload-files-empty-status](openproject-nextcloud-upload-files-empty-status.png) -### More options for linked Nextcloud files in an OpenProject work package +### More options for linked Nextcloud files in OpenProject The **Files** tab shows you Nextcloud files that are linked to the current work package. Hovering on any linked file with your mouse will give you options to open or download the file, show the containing folder in Nextcloud or remove the link. -Please note: Removing the link from within a work package in OpenProject will not delete the file or folder in Nextcloud. Uploading a new file with the same name will ask you to either overwrite the existing one in Nextcloud or create an additional copy next to it. +**Please note:** Removing the link from within a work package in OpenProject will not delete the file or folder in Nextcloud. When uploading a new file with the same name, you will be asked if you want to either overwrite the existing one in Nextcloud or create an additional copy of it. ## Setting public holidays as non-working days -In OpenProject you can define working days and non-working days of the week. On an instance level you set which days of the week are considered working days. +OpenProject already lets administrators set the work week at an instance-level by letting them define the working and non-working days of the week. -With OpenProject 12.5 you can now add additional non-working days to take into account e.g. public holidays or closures. Consequently, work packages cannot start or end on these dates and these days do not count towards the duration of a work package. +With OpenProject 12.5, administrators can now also define additional individual non-working days of the year. This can be useful to program in public holidays or closures. Work packages cannot then start or end on these days and these days do not count towards the duration of a work package. (A user can nevertheless turn the 'Working days only' switch off at a work package level and schedule on non-working days if needed). ![Non-working-days-holidays](Non-working-days-holidays.png) -**Please note**: These additional non-working days will be set instance-wide, for all projects. They need to be set for every year, e.g. Christmas day has to be set for 2023, 2024 etc. if applicable. If you add additional non-working days, you will be asked if you want to re-schedule your work packages. +**Please note**: These additional non-working days are set at an instance level and affect all work packages in all projects. Adding additional non-working days can therefore affect and reschedule a large number of work packages in the instance (except those for which the 'Working days only' switch is turned off). Individual non-working days and are also tied to a specific year. Recurring holidays like Christmas have to be set separately for each year. -## Track project changes +## View project activity -From OpenProject 12.5 the Activities will now include the changes of project attributes and project custom fields. You can directly open the project activity view from the Project list by clicking on the extended menu of a project and then choosing project activity. +Starting with OpenProject 12.5, the Activities module (if enabled) will now include the changes to project attributes and project custom fields. You can directly open the project activity view from the Project list by clicking on the *More* menu of a particular project and then choosing *Project activity*. ![project-list-activity](project-list-activity.png) -Also, you can see the project activity in your Activity module within a project and filter for the required information to track project changes. +You can also access project activity by clicking on *Activity* on the project sidebar menu and using the filters at the bottom of the sidebar to filter for the attributes you wish to view. ![project-activity-tracking](project-activity-tracking.png) ## New default filter for overdue work packages -We added a default filter **Overdue** in the work package list so that you can quickly see which of your work packages are overdue and need your attention. +We have added a new default filter **Overdue** to the work package module so that you can quickly see which of your work packages are overdue and need attention. ![work-package-filter-overdue](work-package-filter-overdue.png) ## Printing Wikis -If you want to print your Wiki, with OpenProject 12.5 you can now do so. A print function has been added to the **More** menu at the top right in your Wiki. +If you want to print your Wiki, with OpenProject 12.5 you can now do so. A print function has been added to the **More** menu at the top right corner of your Wiki. ![wiki print function](openproject-print-wiki.png) -## Advanced search for work package attachment or content released for the Community +## Advanced search for work package attachment or content released to the community -With OpenProject 12.5, we are happy to announce that another Enterprise add-on was released for the free-of-charge Community version. The advanced filters enable not only full text search but also to [filter and search for work packages attachments and content of the attachments](../../user-guide/work-packages/work-package-table-configuration/#filter-for-attachment-file-name-and-content). +With OpenProject 12.5, we are happy to announce that another Enterprise add-on was released to the free-of-charge Community version. The advanced filters enable not only full text search but also to [filter and search for work packages attachments and content of the attachments](../../user-guide/work-packages/work-package-table-configuration/#filter-for-attachment-file-name-and-content). ![openproject-search-work-package-attachments](openproject-search-work-package-attachments.png) diff --git a/docs/release-notes/12-5-2/README.md b/docs/release-notes/12-5-2/README.md new file mode 100644 index 000000000000..36c85d3e38a4 --- /dev/null +++ b/docs/release-notes/12-5-2/README.md @@ -0,0 +1,34 @@ +--- +title: OpenProject 12.5.2 +sidebar_navigation: + title: 12.5.2 +release_version: 12.5.2 +release_date: 2023-03-28 +--- + +# OpenProject 12.5.2 + +Release date: 2023-03-28 + +We released [OpenProject 12.5.2](https://community.openproject.com/versions/1693). +The release contains several bug fixes and we recommend updating to the newest version. + + +#### Bug fixes and changes + +- Fixed: [AppSignal] incompatible character encodings: ASCII-8BIT and UTF-8 \[[#43898](https://community.openproject.com/wp/43898)\] +- Fixed: Missing deletion confirmation for subprojects \[[#45935](https://community.openproject.com/wp/45935)\] +- Fixed: Green button turns to black on hover \[[#47026](https://community.openproject.com/wp/47026)\] +- Fixed: Time log entries too coarse \[[#47027](https://community.openproject.com/wp/47027)\] +- Fixed: Burndown charts empty since 12.5 \[[#47079](https://community.openproject.com/wp/47079)\] +- Fixed: Direct download of a storage file fails \[[#47113](https://community.openproject.com/wp/47113)\] +- Fixed: Fix direct uploads when Nextcloud configured without pretty URLs \[[#47152](https://community.openproject.com/wp/47152)\] +- Fixed: Swagger UI is not rendering for API docs \[[#47157](https://community.openproject.com/wp/47157)\] +- Changed: Add hint if Nextcloud App "OpenProject Integration" needs upgrade for 12.5 \[[#47021](https://community.openproject.com/wp/47021)\] + +#### Contributions +A big thanks to community members for reporting bugs and helping us identifying and providing fixes. + +Special thanks for reporting and finding bugs go to + +Jörg Mollowitz, André Keil diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index 58a86ab96dcc..fde8ea1a50b0 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -14,6 +14,13 @@ Stay up to date and get an overview of the new features included in the releases +## 12.5.2 + +Release date: 2023-03-28 + +[Release Notes](12-5-2/) + + ## 12.5.1 Release date: 2023-03-20 diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3534ad61c5f7..5cfd357a8f5b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -129,7 +129,6 @@ "@types/mousetrap": "^1.6.3", "@types/pako": "^1.0.1", "@types/resize-observer-browser": "^0.1.4", - "@types/swagger-ui": "^3.47.0", "@types/urijs": "^1.19.6", "@types/uuid": "^8.3.4", "@types/webpack-env": "^1.16.0", @@ -23659,12 +23658,6 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, - "node_modules/@types/swagger-ui": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@types/swagger-ui/-/swagger-ui-3.52.0.tgz", - "integrity": "sha512-SlufixEmh+8CLHNgTfAfCT1icNOF7bXboWabhHr1+hIolqlvfwYJGe7HgRcpI3ChE7HWASmEKLkMu34rxseJjQ==", - "dev": true - }, "node_modules/@types/tapable": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", @@ -67891,12 +67884,6 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, - "@types/swagger-ui": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@types/swagger-ui/-/swagger-ui-3.52.0.tgz", - "integrity": "sha512-SlufixEmh+8CLHNgTfAfCT1icNOF7bXboWabhHr1+hIolqlvfwYJGe7HgRcpI3ChE7HWASmEKLkMu34rxseJjQ==", - "dev": true - }, "@types/tapable": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", diff --git a/frontend/package.json b/frontend/package.json index c5f58ca68713..f7b36dea97cf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -40,7 +40,6 @@ "@types/mousetrap": "^1.6.3", "@types/pako": "^1.0.1", "@types/resize-observer-browser": "^0.1.4", - "@types/swagger-ui": "^3.47.0", "@types/urijs": "^1.19.6", "@types/uuid": "^8.3.4", "@types/webpack-env": "^1.16.0", diff --git a/frontend/src/app/features/api-docs/swagger-ui/swagger-ui.component.ts b/frontend/src/app/features/api-docs/swagger-ui/swagger-ui.component.ts index 2e4ecdf3e0cb..ce99e41ef326 100644 --- a/frontend/src/app/features/api-docs/swagger-ui/swagger-ui.component.ts +++ b/frontend/src/app/features/api-docs/swagger-ui/swagger-ui.component.ts @@ -26,15 +26,19 @@ // See COPYRIGHT and LICENSE files for more details. //++ -import { AfterViewInit, Component, ViewEncapsulation } from '@angular/core'; +import { + AfterViewInit, ChangeDetectionStrategy, Component, ViewEncapsulation, +} from '@angular/core'; import { PathHelperService } from 'core-app/core/path-helper/path-helper.service'; -import * as SwaggerUI from 'swagger-ui'; +// @ts-ignore +import SwaggerUI from 'swagger-ui'; @Component({ selector: 'op-api-docs', styleUrls: ['./swagger-ui.component.sass'], templateUrl: './swagger-ui.component.html', encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, }) export class SwaggerUIComponent implements AfterViewInit { constructor(private pathHelperService:PathHelperService) { @@ -45,6 +49,7 @@ export class SwaggerUIComponent implements AfterViewInit { dom_id: '#swagger', url: this.pathHelperService.api.v3.openApiSpecPath, filter: true, + // @ts-ignore requestInterceptor: (req) => { if (!req.loadSpec) { // required to make session-based authentication work for POST requests with APIv3 diff --git a/frontend/src/app/shared/components/fields/edit/field-types/hours-duration-edit-field.component.ts b/frontend/src/app/shared/components/fields/edit/field-types/hours-duration-edit-field.component.ts index 8f27c8cfef37..2ebd3dfa67a5 100644 --- a/frontend/src/app/shared/components/fields/edit/field-types/hours-duration-edit-field.component.ts +++ b/frontend/src/app/shared/components/fields/edit/field-types/hours-duration-edit-field.component.ts @@ -35,7 +35,7 @@ import { TimezoneService } from 'core-app/core/datetime/timezone.service'; @Component({ template: ` e - response = error(:not_authorized, 'Outbound request not authorized!', e.response) + service_result = error(:not_authorized, 'Outbound request not authorized!', e.response) rescue RestClient::NotFound => e - response = error(:not_found, 'Outbound request destination not found!', e.response) + service_result = error(:not_found, 'Outbound request destination not found!', e.response) rescue RestClient::ExceptionWithResponse => e - response = error(:error, 'Outbound request failed!', e.response) + service_result = error(:error, 'Outbound request failed!', e.response) rescue StandardError - response = error(:error, 'Outbound request failed!') + service_result = error(:error, 'Outbound request failed!') end - response - .bind do |r| - # The nextcloud API returns a successful response with empty body if the authorization is missing or expired - if r.body.blank? - error(:not_authorized, 'Outbound request not authorized!') - else - ServiceResult.success(result: r) - end + service_result.bind do |response| + # The nextcloud API returns a successful response with empty body if the authorization is missing or expired + if response.body.blank? + error(:not_authorized, 'Outbound request not authorized!') + else + ServiceResult.success(result: response) end + end end end + # rubocop:enable Metrics/AbcSize + def error(code, log_message = nil, data = nil) ServiceResult.failure( result: code, # This is needed to work with the ConnectionManager token refresh mechanism. @@ -91,7 +94,7 @@ def error(code, log_message = nil, data = nil) end def download_link(token, origin_name) - URI::join(@base_uri, "/index.php/apps/integration_openproject/direct/#{token}/#{CGI.escape(origin_name)}") + api_v3_paths.join_uri_path(@base_uri, 'index.php/apps/integration_openproject/direct', token, CGI.escape(origin_name)) end def direct_download_token(body:) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/files_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/files_query.rb index 88cea3ac1989..d95e5367f59e 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/files_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/files_query.rb @@ -28,12 +28,14 @@ module Storages::Peripherals::StorageInteraction::Nextcloud class FilesQuery < Storages::Peripherals::StorageInteraction::StorageQuery + include API::V3::Utilities::PathHelper + def initialize(base_uri:, token:, retry_proc:) super() @uri = base_uri @token = token @retry_proc = retry_proc - @base_path = File.join(@uri.path, "remote.php/dav/files", escape_whitespace(token.origin_user_id)) + @base_path = api_v3_paths.join_uri_path(@uri.path, "remote.php/dav/files", escape_whitespace(token.origin_user_id)) end def query(parent) diff --git a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/upload_link_query.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/upload_link_query.rb index 3e1f0cdfccda..030425ef9d01 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/upload_link_query.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/upload_link_query.rb @@ -28,10 +28,11 @@ module Storages::Peripherals::StorageInteraction::Nextcloud class UploadLinkQuery < Storages::Peripherals::StorageInteraction::StorageQuery + include API::V3::Utilities::PathHelper using Storages::Peripherals::ServiceResultRefinements # use '>>' (bind) operator for ServiceResult - URI_TOKEN_REQUEST = 'apps/integration_openproject/direct-upload-token'.freeze - URI_UPLOAD_BASE_PATH = 'apps/integration_openproject/direct-upload'.freeze + URI_TOKEN_REQUEST = 'index.php/apps/integration_openproject/direct-upload-token'.freeze + URI_UPLOAD_BASE_PATH = 'index.php/apps/integration_openproject/direct-upload'.freeze def initialize(base_uri:, token:, retry_proc:) super() @@ -68,7 +69,7 @@ def request_direct_upload_token(data) end def build_upload_link(response) - destination = URI.parse(File.join(@base_uri.to_s, URI_UPLOAD_BASE_PATH, response.token)) + destination = URI.parse(api_v3_paths.join_uri_path(@base_uri, URI_UPLOAD_BASE_PATH, response.token)) ServiceResult.success(result: Storages::UploadLink.new(destination)) end @@ -79,7 +80,7 @@ def outbound_response(method:, relative_path:, payload:) response = ServiceResult.success( result: RestClient::Request.execute( method:, - url: File.join(@base_uri.to_s, relative_path), + url: api_v3_paths.join_uri_path(@base_uri, relative_path), payload: payload.to_json, headers: { 'Authorization' => "Bearer #{token.access_token}", diff --git a/modules/storages/app/views/storages/admin/storages/new_oauth_client.html.erb b/modules/storages/app/views/storages/admin/storages/new_oauth_client.html.erb index 72a7fd4a94c1..1268e41e7303 100644 --- a/modules/storages/app/views/storages/admin/storages/new_oauth_client.html.erb +++ b/modules/storages/app/views/storages/admin/storages/new_oauth_client.html.erb @@ -17,7 +17,7 @@ <%= "#{t("storages.instructions.copy_from")}: " %> <%= link_to "#{t("storages.instructions.#{@storage.provider_type}.integration")}", - URI::join(@storage.host, "settings/admin/openproject").to_s, + File.join(@storage.host, "settings/admin/openproject").to_s, target: "_blank" %> @@ -30,7 +30,7 @@ <%= "#{t("storages.instructions.copy_from")}: " %> <%= link_to "#{t("storages.instructions.#{@storage.provider_type}.integration")}", - URI::join(@storage.host, "settings/admin/openproject").to_s, + File.join(@storage.host, "settings/admin/openproject").to_s, target: "blank" %> diff --git a/modules/storages/config/locales/crowdin/js-af.yml b/modules/storages/config/locales/crowdin/js-af.yml index d064c9a8f5c8..7a9a10092ca4 100644 --- a/modules/storages/config/locales/crowdin/js-af.yml +++ b/modules/storages/config/locales/crowdin/js-af.yml @@ -57,7 +57,7 @@ af: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ar.yml b/modules/storages/config/locales/crowdin/js-ar.yml index 7d6e469c6171..eded7dab477c 100644 --- a/modules/storages/config/locales/crowdin/js-ar.yml +++ b/modules/storages/config/locales/crowdin/js-ar.yml @@ -64,7 +64,7 @@ ar: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-az.yml b/modules/storages/config/locales/crowdin/js-az.yml index e0b607c489a3..14f21e20348c 100644 --- a/modules/storages/config/locales/crowdin/js-az.yml +++ b/modules/storages/config/locales/crowdin/js-az.yml @@ -57,7 +57,7 @@ az: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-be.yml b/modules/storages/config/locales/crowdin/js-be.yml index 768218ecf70f..145d1e03e1b2 100644 --- a/modules/storages/config/locales/crowdin/js-be.yml +++ b/modules/storages/config/locales/crowdin/js-be.yml @@ -61,7 +61,7 @@ be: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-bg.yml b/modules/storages/config/locales/crowdin/js-bg.yml index 6da77e453e16..9119862766e4 100644 --- a/modules/storages/config/locales/crowdin/js-bg.yml +++ b/modules/storages/config/locales/crowdin/js-bg.yml @@ -57,7 +57,7 @@ bg: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ca.yml b/modules/storages/config/locales/crowdin/js-ca.yml index c452928ee67d..fdde536ae0c8 100644 --- a/modules/storages/config/locales/crowdin/js-ca.yml +++ b/modules/storages/config/locales/crowdin/js-ca.yml @@ -57,7 +57,7 @@ ca: other: "%{count} enllaços de fitxer creat correctament." upload_error: default: > - El fitxer (%{fileName}) no s'ha pogut carregar. Si us plau, contacta el teu administrador per a més informació. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > El fitxer (%{fileName}) no s'ha pogut carregar a causa de les restriccions del sistema. Si us plau, contacta el teu administrador per a més informació. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ckb-IR.yml b/modules/storages/config/locales/crowdin/js-ckb-IR.yml index 494a82f82066..aed17f566fb1 100644 --- a/modules/storages/config/locales/crowdin/js-ckb-IR.yml +++ b/modules/storages/config/locales/crowdin/js-ckb-IR.yml @@ -57,7 +57,7 @@ ckb-IR: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-cs.yml b/modules/storages/config/locales/crowdin/js-cs.yml index 14ca56153f42..6765e4ad2055 100644 --- a/modules/storages/config/locales/crowdin/js-cs.yml +++ b/modules/storages/config/locales/crowdin/js-cs.yml @@ -61,7 +61,7 @@ cs: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-da.yml b/modules/storages/config/locales/crowdin/js-da.yml index a747b5ab73ee..4657c50a5b5b 100644 --- a/modules/storages/config/locales/crowdin/js-da.yml +++ b/modules/storages/config/locales/crowdin/js-da.yml @@ -57,7 +57,7 @@ da: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-de.yml b/modules/storages/config/locales/crowdin/js-de.yml index 2e9c69155165..faee53a210e8 100644 --- a/modules/storages/config/locales/crowdin/js-de.yml +++ b/modules/storages/config/locales/crowdin/js-de.yml @@ -57,7 +57,7 @@ de: other: "%{count} Dateiverknüpfungen erfolgreich erstellt." upload_error: default: > - Ihre Datei (%{fileName}) konnte nicht hochgeladen werden. Bitte kontaktieren Sie Ihren Administrator für weitere Informationen. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Ihre Datei (%{fileName}) konnte aufgrund von Systembeschränkungen nicht hochgeladen werden. Bitte kontaktieren Sie Ihren Administrator für weitere Informationen. 413: > diff --git a/modules/storages/config/locales/crowdin/js-el.yml b/modules/storages/config/locales/crowdin/js-el.yml index 88fd877a923a..bf56620c0967 100644 --- a/modules/storages/config/locales/crowdin/js-el.yml +++ b/modules/storages/config/locales/crowdin/js-el.yml @@ -57,7 +57,7 @@ el: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-eo.yml b/modules/storages/config/locales/crowdin/js-eo.yml index 39c3476004a4..42dd80830b32 100644 --- a/modules/storages/config/locales/crowdin/js-eo.yml +++ b/modules/storages/config/locales/crowdin/js-eo.yml @@ -57,7 +57,7 @@ eo: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-es.yml b/modules/storages/config/locales/crowdin/js-es.yml index 2da3faad3173..f3be56107086 100644 --- a/modules/storages/config/locales/crowdin/js-es.yml +++ b/modules/storages/config/locales/crowdin/js-es.yml @@ -57,7 +57,7 @@ es: other: "Se han creado correctamente %{count} enlaces de fichero." upload_error: default: > - Su archivo (%{fileName}) no se pudo cargar. Por favor, contacte con su administrador para más información. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Su archivo (%{fileName}) no se pudo cargar debido a las restricciones del sistema. Por favor, contacte con su administrador para más información. 413: > diff --git a/modules/storages/config/locales/crowdin/js-et.yml b/modules/storages/config/locales/crowdin/js-et.yml index 0491f0065fd4..69eb37fa988e 100644 --- a/modules/storages/config/locales/crowdin/js-et.yml +++ b/modules/storages/config/locales/crowdin/js-et.yml @@ -57,7 +57,7 @@ et: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-eu.yml b/modules/storages/config/locales/crowdin/js-eu.yml index 54830ee7bce6..640ef7e6b26f 100644 --- a/modules/storages/config/locales/crowdin/js-eu.yml +++ b/modules/storages/config/locales/crowdin/js-eu.yml @@ -57,7 +57,7 @@ eu: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-fa.yml b/modules/storages/config/locales/crowdin/js-fa.yml index 0aa71afb4072..e913bee2807d 100644 --- a/modules/storages/config/locales/crowdin/js-fa.yml +++ b/modules/storages/config/locales/crowdin/js-fa.yml @@ -57,7 +57,7 @@ fa: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-fi.yml b/modules/storages/config/locales/crowdin/js-fi.yml index af8c56cd8ef8..16d6caebdef8 100644 --- a/modules/storages/config/locales/crowdin/js-fi.yml +++ b/modules/storages/config/locales/crowdin/js-fi.yml @@ -57,7 +57,7 @@ fi: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-fil.yml b/modules/storages/config/locales/crowdin/js-fil.yml index fa5d4349a711..69f50191963f 100644 --- a/modules/storages/config/locales/crowdin/js-fil.yml +++ b/modules/storages/config/locales/crowdin/js-fil.yml @@ -57,7 +57,7 @@ fil: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-fr.yml b/modules/storages/config/locales/crowdin/js-fr.yml index d78b17a8660f..dacc6358dd8d 100644 --- a/modules/storages/config/locales/crowdin/js-fr.yml +++ b/modules/storages/config/locales/crowdin/js-fr.yml @@ -57,7 +57,7 @@ fr: other: "%{count} liens de fichier ont été créés avec succès." upload_error: default: > - Votre fichier (%{fileName}) n'a pas pu être téléversé. Veuillez contacter votre administrateur pour obtenir plus d'informations. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Votre fichier (%{fileName}) n'a pas pu être téléversé en raison de restrictions du système. Veuillez contacter votre administrateur pour obtenir plus d'informations. 413: > diff --git a/modules/storages/config/locales/crowdin/js-he.yml b/modules/storages/config/locales/crowdin/js-he.yml index f515e42e57f4..c0efed120594 100644 --- a/modules/storages/config/locales/crowdin/js-he.yml +++ b/modules/storages/config/locales/crowdin/js-he.yml @@ -61,7 +61,7 @@ he: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-hi.yml b/modules/storages/config/locales/crowdin/js-hi.yml index 224612b215d2..78c7ba5e35dc 100644 --- a/modules/storages/config/locales/crowdin/js-hi.yml +++ b/modules/storages/config/locales/crowdin/js-hi.yml @@ -57,7 +57,7 @@ hi: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-hr.yml b/modules/storages/config/locales/crowdin/js-hr.yml index 1765be2fd005..5321194b0cc7 100644 --- a/modules/storages/config/locales/crowdin/js-hr.yml +++ b/modules/storages/config/locales/crowdin/js-hr.yml @@ -59,7 +59,7 @@ hr: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-hu.yml b/modules/storages/config/locales/crowdin/js-hu.yml index f69b9b34a6a8..fbfb8a7bfd0a 100644 --- a/modules/storages/config/locales/crowdin/js-hu.yml +++ b/modules/storages/config/locales/crowdin/js-hu.yml @@ -57,7 +57,7 @@ hu: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-id.yml b/modules/storages/config/locales/crowdin/js-id.yml index 3c2f31e31847..026c44dee375 100644 --- a/modules/storages/config/locales/crowdin/js-id.yml +++ b/modules/storages/config/locales/crowdin/js-id.yml @@ -55,7 +55,7 @@ id: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-it.yml b/modules/storages/config/locales/crowdin/js-it.yml index b73ca0b9d76b..f9080c728b2d 100644 --- a/modules/storages/config/locales/crowdin/js-it.yml +++ b/modules/storages/config/locales/crowdin/js-it.yml @@ -57,7 +57,7 @@ it: other: "%{count} link di file creati correttamente." upload_error: default: > - Il tuo file (%{fileName}) non può essere caricato. Per ulteriori informazioni, contatta il tuo amministratore. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Il tuo file (%{fileName}) non può essere caricato a causa di restrizioni di sistema. Per ulteriori informazioni, contatta il tuo amministratore. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ja.yml b/modules/storages/config/locales/crowdin/js-ja.yml index d3cc37b00ff4..12ad2b6bb057 100644 --- a/modules/storages/config/locales/crowdin/js-ja.yml +++ b/modules/storages/config/locales/crowdin/js-ja.yml @@ -55,7 +55,7 @@ ja: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ko.yml b/modules/storages/config/locales/crowdin/js-ko.yml index f8a243c10bff..c3ff83ad9019 100644 --- a/modules/storages/config/locales/crowdin/js-ko.yml +++ b/modules/storages/config/locales/crowdin/js-ko.yml @@ -55,7 +55,7 @@ ko: other: "%{count}개 파일 링크를 생성했습니다." upload_error: default: > - 파일(%{fileName})을 업로드할 수 없습니다. 자세한 내용은 관리자에게 문의하세요. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > 시스템 제한으로 인해 파일(%{fileName})을 업로드할 수 없습니다. 자세한 내용은 관리자에게 문의하세요. 413: > diff --git a/modules/storages/config/locales/crowdin/js-lol.yml b/modules/storages/config/locales/crowdin/js-lol.yml index 12e972fd03e0..de0d3ba9e6a2 100644 --- a/modules/storages/config/locales/crowdin/js-lol.yml +++ b/modules/storages/config/locales/crowdin/js-lol.yml @@ -57,7 +57,7 @@ lol: other: "crwdns848123:5%{count}crwdne848123:5" upload_error: default: > - crwdns848125:0%{fileName}crwdne848125:0 + crwdns850073:0%{fileName}crwdne850073:0 403: > crwdns848127:0%{fileName}crwdne848127:0 413: > diff --git a/modules/storages/config/locales/crowdin/js-lt.yml b/modules/storages/config/locales/crowdin/js-lt.yml index 572b1920af66..9c23756db663 100644 --- a/modules/storages/config/locales/crowdin/js-lt.yml +++ b/modules/storages/config/locales/crowdin/js-lt.yml @@ -61,7 +61,7 @@ lt: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-lv.yml b/modules/storages/config/locales/crowdin/js-lv.yml index 809ac9fe6293..cefd3bd0d366 100644 --- a/modules/storages/config/locales/crowdin/js-lv.yml +++ b/modules/storages/config/locales/crowdin/js-lv.yml @@ -58,7 +58,7 @@ lv: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-mn.yml b/modules/storages/config/locales/crowdin/js-mn.yml index d572aa21272b..ad00b11be702 100644 --- a/modules/storages/config/locales/crowdin/js-mn.yml +++ b/modules/storages/config/locales/crowdin/js-mn.yml @@ -57,7 +57,7 @@ mn: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ne.yml b/modules/storages/config/locales/crowdin/js-ne.yml index 4d7963cb0af9..a1f03d41d424 100644 --- a/modules/storages/config/locales/crowdin/js-ne.yml +++ b/modules/storages/config/locales/crowdin/js-ne.yml @@ -57,7 +57,7 @@ ne: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-nl.yml b/modules/storages/config/locales/crowdin/js-nl.yml index 62a767a6613e..205bf701c8cf 100644 --- a/modules/storages/config/locales/crowdin/js-nl.yml +++ b/modules/storages/config/locales/crowdin/js-nl.yml @@ -57,7 +57,7 @@ nl: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-no.yml b/modules/storages/config/locales/crowdin/js-no.yml index 8aef75366818..46aacf84111f 100644 --- a/modules/storages/config/locales/crowdin/js-no.yml +++ b/modules/storages/config/locales/crowdin/js-no.yml @@ -57,7 +57,7 @@ other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-pl.yml b/modules/storages/config/locales/crowdin/js-pl.yml index 3323e3d40431..07629ea2f393 100644 --- a/modules/storages/config/locales/crowdin/js-pl.yml +++ b/modules/storages/config/locales/crowdin/js-pl.yml @@ -61,7 +61,7 @@ pl: other: "Pomyślnie utworzono %{count} połączeń plików." upload_error: default: > - Nie można przesłać pliku (%{fileName}). Aby uzyskać więcej informacji, skontaktuj się z administratorem. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Nie można przesłać pliku (%{fileName}) ze względu na ograniczenia systemu. Aby uzyskać więcej informacji, skontaktuj się z administratorem. 413: > diff --git a/modules/storages/config/locales/crowdin/js-pt.yml b/modules/storages/config/locales/crowdin/js-pt.yml index 0207e046f0fc..105a48231d1b 100644 --- a/modules/storages/config/locales/crowdin/js-pt.yml +++ b/modules/storages/config/locales/crowdin/js-pt.yml @@ -57,7 +57,7 @@ pt: other: "Criou com sucesso %{count} vínculos do arquivo." upload_error: default: > - Não foi possível carregar seu arquivo (%{fileName}). Entre em contato com seu administrador para obter mais informações. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Não foi possível carregar seu arquivo (%{fileName}) devido a restrições do sistema. Entre em contato com o seu administrador para obter mais informações. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ro.yml b/modules/storages/config/locales/crowdin/js-ro.yml index 867af114bb51..fd927d12a8b8 100644 --- a/modules/storages/config/locales/crowdin/js-ro.yml +++ b/modules/storages/config/locales/crowdin/js-ro.yml @@ -59,7 +59,7 @@ ro: other: "A creat cu succes %{count} de legături de fișiere." upload_error: default: > - Fișierul dumneavoastră (%{fileName}) nu a putut fi încărcat. Vă rugăm să contactați administratorul dumneavoastră pentru mai multe informații. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Fişierul (%{fileName}) nu a putut fi încărcat din cauza restricţiilor de sistem. Vă rugăm să contactaţi administratorul pentru mai multe informaţii. 413: > diff --git a/modules/storages/config/locales/crowdin/js-ru.yml b/modules/storages/config/locales/crowdin/js-ru.yml index 6f8d9ca1465f..bbe8b6c62352 100644 --- a/modules/storages/config/locales/crowdin/js-ru.yml +++ b/modules/storages/config/locales/crowdin/js-ru.yml @@ -61,7 +61,7 @@ ru: other: "Успешно создано %{count} ссылок на файл." upload_error: default: > - Ваш файл (%{fileName}) не может быть загружен. Пожалуйста, обратитесь к администратору за дополнительной информацией. + Ваш файл (%{fileName}) не может быть загружен. Пожалуйста, проверьте, что установлена последняя версия приложения Nextcloud "OpenProject Integration", и свяжитесь с вашим администратором для получения дополнительной информации. 403: > Ваш файл (%{fileName}) не удалось загрузить из-за системных ограничений. Пожалуйста, свяжитесь с вашим администратором для получения дополнительной информации. 413: > diff --git a/modules/storages/config/locales/crowdin/js-rw.yml b/modules/storages/config/locales/crowdin/js-rw.yml index 98395e00c8b2..0f67ad12882a 100644 --- a/modules/storages/config/locales/crowdin/js-rw.yml +++ b/modules/storages/config/locales/crowdin/js-rw.yml @@ -57,7 +57,7 @@ rw: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-si.yml b/modules/storages/config/locales/crowdin/js-si.yml index f0b5520fe176..e0859b1f1dc9 100644 --- a/modules/storages/config/locales/crowdin/js-si.yml +++ b/modules/storages/config/locales/crowdin/js-si.yml @@ -57,7 +57,7 @@ si: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-sk.yml b/modules/storages/config/locales/crowdin/js-sk.yml index 1bddbc468524..0d815f36691e 100644 --- a/modules/storages/config/locales/crowdin/js-sk.yml +++ b/modules/storages/config/locales/crowdin/js-sk.yml @@ -61,7 +61,7 @@ sk: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-sl.yml b/modules/storages/config/locales/crowdin/js-sl.yml index f2b9480f0c95..8f89de098271 100644 --- a/modules/storages/config/locales/crowdin/js-sl.yml +++ b/modules/storages/config/locales/crowdin/js-sl.yml @@ -61,7 +61,7 @@ sl: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-sr.yml b/modules/storages/config/locales/crowdin/js-sr.yml index 8ab29ae26a5c..29660465ef5c 100644 --- a/modules/storages/config/locales/crowdin/js-sr.yml +++ b/modules/storages/config/locales/crowdin/js-sr.yml @@ -59,7 +59,7 @@ sr: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-sv.yml b/modules/storages/config/locales/crowdin/js-sv.yml index 3cc430f8ad99..de59bbd4f89f 100644 --- a/modules/storages/config/locales/crowdin/js-sv.yml +++ b/modules/storages/config/locales/crowdin/js-sv.yml @@ -57,7 +57,7 @@ sv: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-th.yml b/modules/storages/config/locales/crowdin/js-th.yml index 66198badc0b2..ff49d34122b5 100644 --- a/modules/storages/config/locales/crowdin/js-th.yml +++ b/modules/storages/config/locales/crowdin/js-th.yml @@ -55,7 +55,7 @@ th: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-tr.yml b/modules/storages/config/locales/crowdin/js-tr.yml index bcb4949c2691..f54ebe9e9135 100644 --- a/modules/storages/config/locales/crowdin/js-tr.yml +++ b/modules/storages/config/locales/crowdin/js-tr.yml @@ -57,7 +57,7 @@ tr: other: "%{count} dosya bağlantısı başarıyla oluşturuldu." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-uk.yml b/modules/storages/config/locales/crowdin/js-uk.yml index e287263e8352..d6af72822b3f 100644 --- a/modules/storages/config/locales/crowdin/js-uk.yml +++ b/modules/storages/config/locales/crowdin/js-uk.yml @@ -61,7 +61,7 @@ uk: other: "Створено посилання на %{count} файлу" upload_error: default: > - Не вдалося вивантажити ваш файл (%{fileName}). Щоб дізнатися більше, зверніться до адміністратора. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Ваш файл (%{fileName}) не можна вивантажити через системні обмеження. Щоб дізнатися більше, зверніться до адміністратора. 413: > diff --git a/modules/storages/config/locales/crowdin/js-vi.yml b/modules/storages/config/locales/crowdin/js-vi.yml index cfc036f071d2..61bdbc024fb5 100644 --- a/modules/storages/config/locales/crowdin/js-vi.yml +++ b/modules/storages/config/locales/crowdin/js-vi.yml @@ -55,7 +55,7 @@ vi: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/crowdin/js-zh-TW.yml b/modules/storages/config/locales/crowdin/js-zh-TW.yml index f7173dda3814..022eb432e2fd 100644 --- a/modules/storages/config/locales/crowdin/js-zh-TW.yml +++ b/modules/storages/config/locales/crowdin/js-zh-TW.yml @@ -55,7 +55,7 @@ zh-TW: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. 413: > diff --git a/modules/storages/config/locales/js-en.yml b/modules/storages/config/locales/js-en.yml index 18e17b7ac549..af0e51dc55b8 100644 --- a/modules/storages/config/locales/js-en.yml +++ b/modules/storages/config/locales/js-en.yml @@ -65,7 +65,7 @@ en: other: "Successfully created %{count} file links." upload_error: default: > - Your file (%{fileName}) could not be uploaded. Please contact your administrator for more information. + Your file (%{fileName}) could not be uploaded. Please check that the latest version of the Nextcloud App "OpenProject Integration" is installed and contact your administrator for more information. 403: > Your file (%{fileName}) could not be uploaded due to system restrictions. Please contact your administrator for more information. diff --git a/modules/storages/spec/common/peripherals/storage_requests_spec.rb b/modules/storages/spec/common/peripherals/storage_requests_spec.rb index 71024a547adc..463051b6cb8c 100644 --- a/modules/storages/spec/common/peripherals/storage_requests_spec.rb +++ b/modules/storages/spec/common/peripherals/storage_requests_spec.rb @@ -74,7 +74,7 @@ def origin_name end let(:download_token) { "8dM3dC9iy1N74F5AJ0ClnjSF4dWTxfymVy1HTXBh8rbZVM81CpcBJaIYZvmR" } let(:uri) do - URI::join(url, "/index.php/apps/integration_openproject/direct/#{download_token}/#{CGI.escape(file_link.origin_name)}") + "#{url}/index.php/apps/integration_openproject/direct/#{download_token}/#{CGI.escape(file_link.origin_name)}" end let(:json) do { @@ -112,6 +112,25 @@ def origin_name end ) end + + context 'if Nextcloud is running on a sub path' do + let(:url) { 'https://example.com/html' } + + it 'must return a download link URL' do + subject + .download_link_query(user:) + .match( + on_success: ->(query) do + result = query.call(file_link) + expect(result).to be_success + expect(result.result).to be_eql(uri) + end, + on_failure: ->(error) do + raise "Files query could not be created: #{error}" + end + ) + end + end end describe 'with not supported storage type selected' do @@ -420,7 +439,7 @@ def origin_name before do allow(OAuthClients::ConnectionManager).to receive(:new).and_return(connection_manager) - stub_request(:post, "#{url}/apps/integration_openproject/direct-upload-token") + stub_request(:post, "#{url}/index.php/apps/integration_openproject/direct-upload-token") .with(body: { folder_id: query_payload.parent }) .to_return( status: 200, @@ -439,7 +458,7 @@ def origin_name on_success: ->(query) do query.call(query_payload).match( on_success: ->(link) { - expect(link.destination.path).to be_eql("/apps/integration_openproject/direct-upload/#{upload_token}") + expect(link.destination.path).to be_eql("/index.php/apps/integration_openproject/direct-upload/#{upload_token}") expect(link.destination.host).to be_eql(URI(url).host) expect(link.destination.scheme).to be_eql(URI(url).scheme) expect(link.destination.user).to be_nil @@ -481,7 +500,7 @@ def origin_name shared_examples_for 'outbound is failing' do |code, symbol| describe "with outbound request returning #{code}" do before do - stub_request(:post, "#{url}/apps/integration_openproject/direct-upload-token").to_return(status: code) + stub_request(:post, "#{url}/index.php/apps/integration_openproject/direct-upload-token").to_return(status: code) end it "must return :#{symbol} ServiceResult" do @@ -513,7 +532,7 @@ def origin_name end let(:uri) do - URI::join(url, "/public.php/webdav/#{query_payload[:fileName]}") + "#{url}/public.php/webdav/#{query_payload[:fileName]}" end let(:share_id) { 37 } diff --git a/modules/two_factor_authentication/config/locales/crowdin/sv.yml b/modules/two_factor_authentication/config/locales/crowdin/sv.yml index abc16b8d3c4f..1fd77a840c30 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/sv.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/sv.yml @@ -71,8 +71,8 @@ sv: text_2fa_enabled: 'Vid varje inloggning, kommer användaren att uppmanas att ange en OTP-token från hans eller hennes 2FA standardenhet.' text_2fa_disabled: "Användaren ställde inte in en 2FA enhet genom sidan 'Mitt konto'" upsale: - title: 'Two-factor authentication' - description: 'Strenghten the security of your OpenProject instance by offering (or enforcing) two-factor authentification to all project members.' + title: 'Tvåfaktorsautentisering' + description: 'Strenghten säkerheten för din OpenProject instans genom att erbjuda (eller genomdriva) tvåfaktorsautentisering till alla projektmedlemmar.' backup_codes: none_found: Inga reservkoder finns för detta konto. singular: Reservkod diff --git a/spec/features/notifications/notification_center/notification_center_date_alerts_spec.rb b/spec/features/notifications/notification_center/notification_center_date_alerts_spec.rb index c95a4b6d02fc..b4bb40d81994 100644 --- a/spec/features/notifications/notification_center/notification_center_date_alerts_spec.rb +++ b/spec/features/notifications/notification_center/notification_center_date_alerts_spec.rb @@ -177,6 +177,7 @@ def run_create_date_alerts_notifications_job .new([timezone_time('1:00', time_zone)]) travel_to(timezone_time('1:04', time_zone)) create_date_alerts_service.call + travel_back end before do diff --git a/spec/mailers/previews/project_mailer_preview.rb b/spec/mailers/previews/project_mailer_preview.rb new file mode 100644 index 000000000000..5a55d26dcf58 --- /dev/null +++ b/spec/mailers/previews/project_mailer_preview.rb @@ -0,0 +1,39 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2023 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class ProjectMailerPreview < ActionMailer::Preview + # Preview emails at http://localhost:3000/rails/mailers/project_mailer + + def delete_project_completed + project = FactoryBot.build_stubbed(:project) + dependent_projects = FactoryBot.build_stubbed_list(:project, 3) + user = FactoryBot.build_stubbed(:user) + + ProjectMailer.delete_project_completed(project, user:, dependent_projects:) + end +end diff --git a/spec/services/projects/delete_service_spec.rb b/spec/services/projects/delete_service_spec.rb index 28ccf261fafe..31245adf2a30 100644 --- a/spec/services/projects/delete_service_spec.rb +++ b/spec/services/projects/delete_service_spec.rb @@ -29,25 +29,65 @@ require 'spec_helper' describe Projects::DeleteService, type: :model do - let(:user) { build_stubbed(:admin) } - let(:project) { build_stubbed(:project) } + shared_let(:user) { create(:admin) } + let(:project) { create(:project) } let(:instance) { described_class.new(user:, model: project) } subject { instance.call } context 'if authorized' do - it 'destroys the project and sends a success mail' do - expect(project).not_to receive(:archive) - expect(project).to receive(:destroy).and_return true + context 'when destroy succeeds' do + it 'destroys the projects' do + allow(project).to receive(:archive) + allow(Projects::DeleteProjectJob).to receive(:new) - expect(ProjectMailer) - .to receive_message_chain(:delete_project_completed, :deliver_now) + expect { subject }.to change(Project, :count).by(-1) + expect(project).not_to have_received(:archive) + expect(Projects::DeleteProjectJob) + .not_to have_received(:new) + end - expect(Projects::DeleteProjectJob) - .not_to receive(:new) + it 'sends a success mail' do + expect(subject).to be_success + ActionMailer::Base.deliveries.last.tap do |mail| + expect(mail.subject).to eq(I18n.t('projects.delete.completed', name: project.name)) + text_part = mail.text_part.to_s + html_part = mail.html_part.to_s + + expect(text_part).to include(project.name) + expect(html_part).to include(project.name) + end + end + + context 'with a hierarchy of projects' do + let!(:children) { create_list(:project, 2, parent: project) } + let!(:grand_children) { create_list(:project, 2, parent: children.first) } + let(:all_children) { children + grand_children } + + before do + project.reload + end + + it 'destroys the projects' do + expect { subject }.to change(Project, :count).by(-5) + end + + it 'sends a success mail mentioning all the child projects' do + expect { subject }.to change(ActionMailer::Base.deliveries, :size).by(1) + + ActionMailer::Base.deliveries.last.tap do |mail| + expect(mail.subject).to eq(I18n.t('projects.delete.completed', name: project.name)) + text_part = mail.text_part.to_s + html_part = mail.html_part.to_s - expect(subject).to be_success + all_children.each do |child| + expect(text_part).to include(child.name) + expect(html_part).to include(child.name) + end + end + end + end end it 'sends a message on destroy failure' do