Merge branch 'release/14.6' into dev

This commit is contained in:
OpenProject Actions CI
2024-10-01 03:41:28 +00:00
51 changed files with 264 additions and 180 deletions
+1 -1
View File
@@ -399,4 +399,4 @@ end
gem "openproject-octicons", "~>19.18.0"
gem "openproject-octicons_helper", "~>19.18.0"
gem "openproject-primer_view_components", "~>0.47.0"
gem "openproject-primer_view_components", "~>0.47.1"
+2 -2
View File
@@ -804,7 +804,7 @@ GEM
actionview
openproject-octicons (= 19.18.0)
railties
openproject-primer_view_components (0.47.0)
openproject-primer_view_components (0.47.1)
actionview (>= 5.0.0)
activesupport (>= 5.0.0)
openproject-octicons (>= 19.17.0)
@@ -1303,7 +1303,7 @@ DEPENDENCIES
openproject-octicons (~> 19.18.0)
openproject-octicons_helper (~> 19.18.0)
openproject-openid_connect!
openproject-primer_view_components (~> 0.47.0)
openproject-primer_view_components (~> 0.47.1)
openproject-recaptcha!
openproject-reporting!
openproject-storages!
@@ -65,9 +65,8 @@ class Admin::CustomFields::CustomFieldProjectsController < ApplicationController
create_service.on_success { render_project_list(url_for_action: :index) }
create_service.on_failure do
update_flash_message_via_turbo_stream(
message: join_flash_messages(create_service.errors),
full: true, dismiss_scheme: :hide, scheme: :danger
render_error_flash_message_via_turbo_stream(
message: join_flash_messages(create_service.errors)
)
end
@@ -82,9 +81,8 @@ class Admin::CustomFields::CustomFieldProjectsController < ApplicationController
delete_service.on_success { render_project_list(url_for_action: :index) }
delete_service.on_failure do
update_flash_message_via_turbo_stream(
message: join_flash_messages(delete_service.errors.full_messages),
full: true, dismiss_scheme: :hide, scheme: :danger
render_error_flash_message_via_turbo_stream(
message: join_flash_messages(delete_service.errors.full_messages)
)
end
@@ -139,15 +137,6 @@ class Admin::CustomFields::CustomFieldProjectsController < ApplicationController
respond_with_project_not_found_turbo_streams
end
def update_project_list_via_turbo_stream(url_for_action: action_name)
update_via_turbo_stream(
component: Admin::CustomFields::CustomFieldProjects::TableComponent.new(
query: available_custom_fields_projects_query,
params: { custom_field: @custom_field, url_for_action: }
)
)
end
def available_custom_fields_projects_query
@available_custom_fields_projects_query = ProjectQuery.new(
name: "custom-fields-projects-#{@custom_field.id}"
@@ -166,9 +155,8 @@ class Admin::CustomFields::CustomFieldProjectsController < ApplicationController
end
def respond_with_project_not_found_turbo_streams
update_flash_message_via_turbo_stream message: t(:notice_project_not_found), full: true, dismiss_scheme: :hide,
scheme: :danger
update_project_list_via_turbo_stream
render_error_flash_message_via_turbo_stream message: t(:notice_project_not_found)
render_project_list(url_for_action: :index)
respond_with_turbo_streams
end
@@ -89,9 +89,8 @@ module Admin::Settings
create_service.on_success { render_project_list(url_for_action: :project_mappings) }
create_service.on_failure do
update_flash_message_via_turbo_stream(
message: join_flash_messages(create_service.errors),
full: true, dismiss_scheme: :hide, scheme: :danger
render_error_flash_message_via_turbo_stream(
message: join_flash_messages(create_service.errors)
)
end
@@ -106,9 +105,8 @@ module Admin::Settings
delete_service.on_success { render_project_list(url_for_action: :project_mappings) }
delete_service.on_failure do
update_flash_message_via_turbo_stream(
message: join_flash_messages(delete_service.errors.full_messages),
full: true, dismiss_scheme: :hide, scheme: :danger
render_error_flash_message_via_turbo_stream(
message: join_flash_messages(delete_service.errors.full_messages)
)
end
@@ -184,15 +182,8 @@ module Admin::Settings
project_id: permitted_params.project_custom_field_project_mapping[:project_id]
)
rescue ActiveRecord::RecordNotFound
update_flash_message_via_turbo_stream(
message: t(:notice_file_not_found), full: true, dismiss_scheme: :hide, scheme: :danger
)
replace_via_turbo_stream(
component: Settings::ProjectCustomFields::ProjectCustomFieldMapping::TableComponent.new(
query: project_custom_field_mappings_query,
params: { custom_field: @custom_field }
)
)
render_error_flash_message_via_turbo_stream(message: t(:notice_file_not_found))
render_project_list(url_for_action: :project_mappings)
respond_with_turbo_streams
end
@@ -213,10 +204,8 @@ module Admin::Settings
false
end
rescue ActiveRecord::RecordNotFound
update_flash_message_via_turbo_stream(
message: t(:notice_project_not_found), full: true, dismiss_scheme: :hide, scheme: :danger
)
render_project_list
render_error_flash_message_via_turbo_stream(message: t(:notice_project_not_found))
render_project_list(url_for_action: :project_mappings)
respond_with_turbo_streams
end
+1 -1
View File
@@ -41,7 +41,7 @@ class Status < ApplicationRecord
uniqueness: { case_sensitive: false },
length: { maximum: 256 }
validates :default_done_ratio, inclusion: { in: 0..100, allow_nil: true }
validates :default_done_ratio, inclusion: { in: 0..100, allow_nil: false }
validate :default_status_must_not_be_readonly
+1 -1
View File
@@ -31,7 +31,7 @@ See COPYRIGHT and LICENSE files for more details.
<section class="form--section">
<div class="form--field -required"><%= f.text_field "name", required: true, container_class: "-middle" %></div>
<div class="form--field"><%= f.number_field "default_done_ratio", min: 0, max: 100, container_class: "-xslim" %></div>
<div class="form--field -required"><%= f.number_field "default_done_ratio", required: true, min: 0, max: 100, container_class: "-xslim" %></div>
<div class="form--field"><%= f.check_box "is_closed" %></div>
<% unless @status.is_default? %>
<div class="form--field"><%= f.check_box "is_default" %></div>
+27 -27
View File
@@ -471,7 +471,7 @@ cs:
irreversible: "Tato akce je nevratná"
confirmation: "Zadejte název zástupného uživatele %{name} pro potvrzení odstranění."
upsale:
title: placeholder uživatel
title: Placeholder uživatel
description: >
Placeholder uživatelé jsou způsob, jak přiřadit pracovní balíčky uživatelům, kteří nejsou součástí vašeho projektu. Mohou být užiteční v řadě scénářů; například, pokud potřebujete sledovat úkoly u zdroje, který ještě nejsou pojmenovány nebo dostupné, nebo pokud nechcete této osobě umožnit přístup k OpenProject ale stále chcete sledovat úkoly, které jim byly přiděleny.
prioritiies:
@@ -695,7 +695,7 @@ cs:
false: "archivováno"
identifier: "Identifikátor"
latest_activity_at: "Poslední aktivita"
parent: "Podprojekt"
parent: "Nadřazený projekt"
public_value:
title: "Viditelnost"
true: "veřejný"
@@ -801,7 +801,7 @@ cs:
true: "zahrnuje nepracovní dny"
notify: "Oznámit" #used in custom actions
parent: "Nadřazený"
parent_issue: "Rodič"
parent_issue: "Nadřazený"
parent_work_package: "Nadřazený"
priority: "Priorita"
progress: "% Dokončeno"
@@ -938,7 +938,7 @@ cs:
meeting:
error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
notifications:
at_least_one_channel: "Alespoň jeden kanál pro odesílání oznámení musí být specifikován."
at_least_one_channel: "Pro odesílání notifikací musí být specifikován alespoň jeden kanál"
attributes:
read_ian:
read_on_creation: "nelze nastavit na pravdivé při vytváření oznámení "
@@ -1190,11 +1190,11 @@ cs:
member: "Člen"
news: "Novinky"
notification:
one: "Oznámení"
few: "Oznámení"
many: "Oznámení"
other: "Oznámení"
placeholder_user: "placeholder uživatel"
one: "Notifikace"
few: "Notifikací"
many: "Notifikací"
other: "Notifikace"
placeholder_user: "Placeholder uživatel"
project: "Projekt"
project_query:
one: "Seznam projektů"
@@ -1915,7 +1915,7 @@ cs:
instructions_after_error: "Zkuste se znovu přihlásit kliknutím na %{signin}. Pokud chyba přetrvává, požádejte správce o pomoc."
menus:
admin:
mail_notification: "E-mailová upozornění"
mail_notification: "E-mailové notifikace"
mails_and_notifications: "E-maily a oznámení"
aggregation: "Agregace"
api_and_webhooks: "API & Webhooky"
@@ -1978,7 +1978,7 @@ cs:
by_project: "Nepřečteno dle projektu"
by_reason: "Důvod"
inbox: "Doručená pošta"
send_notifications: "Odeslat oznámení pro tuto akci"
send_notifications: "Pro tuto akci odeslat notifikaci"
work_packages:
subject:
created: "Pracovní balíček byl vytvořen."
@@ -2379,9 +2379,9 @@ cs:
label_permissions: "Práva"
label_permissions_report: "Přehled oprávnění"
label_personalize_page: "Přizpůsobit tuto stránku"
label_placeholder_user: "placeholder uživatel"
label_placeholder_user: "Placeholder uživatel"
label_placeholder_user_new: ""
label_placeholder_user_plural: "placeholder uživatelé"
label_placeholder_user_plural: "Placeholder uživatelé"
label_planning: "Plánování"
label_please_login: "Přihlaste se prosím"
label_plugins: "Pluginy"
@@ -2404,7 +2404,7 @@ cs:
label_project_attribute_plural: "Atributy projektu"
label_project_attribute_manage_link: "Správa atributů produktu"
label_project_count: "Celkový počet projektů"
label_project_copy_notifications: "Během kopie projektu odeslat oznámení e-mailem"
label_project_copy_notifications: "Během kopírování projektu odeslat notifikace e-mailem"
label_project_latest: "Nejnovější projekty"
label_project_default_type: "Povolit prázdný typ"
label_project_hierarchy: "Hierarchie projektu"
@@ -2546,7 +2546,7 @@ cs:
label_users_settings: "Uživatelská nastavení"
label_version_new: "Nová verze"
label_version_plural: "Verze"
label_version_sharing_descendants: "S Podprojekty"
label_version_sharing_descendants: "S podprojekty"
label_version_sharing_hierarchy: "S hierarchií projektu"
label_version_sharing_none: "Není sdíleno"
label_version_sharing_system: "Se všemi projekty"
@@ -2651,28 +2651,28 @@ cs:
digests:
including_mention_singular: "včetně zmínky"
including_mention_plural: "včetně %{number_mentioned} zmínění"
unread_notification_singular: "1 nepřečtené oznámení"
unread_notification_plural: "%{number_unread} nepřečtených oznámení"
unread_notification_singular: "1 nepřečtená notifikace"
unread_notification_plural: "%{number_unread} nepřečtených notifikací"
you_have: "Máte"
logo_alt_text: "Logo"
mention:
subject: "%{user_name} vás zmínil v #%{id} - %{subject}"
notification:
center: "Centrum oznámení"
center: "Centrum notifikací"
see_in_center: "Zobrazit komentář v oznamovacím centru"
settings: "Změnit nastavení e-mailu"
salutation: "Ahoj %{user}!"
salutation_full_name: "Jméno a příjmení"
work_packages:
created_at: "Vytvořeno v %{timestamp} uživatelem %{user} "
login_to_see_all: "Přihlaste se pro zobrazení všech oznámení."
login_to_see_all: "Přihlaste se pro zobrazení všech notifikací."
mentioned: "Byli jste <b>zmíněni v komentáři</b>"
mentioned_by: "%{user} vás zmínil v komentáři"
more_to_see:
one: "Existuje ještě 1 pracovní balíček s oznámeními."
few: "Existuje ještě %{count} pracovních balíčků s oznámeními."
many: "Existuje ještě %{count} pracovních balíčků s oznámeními."
other: "Existuje ještě %{count} pracovních balíčků s oznámeními."
one: "Existuje ještě 1 pracovní balíček s notifikací."
few: "Existuje ještě %{count} pracovních balíčků s notifikacema."
many: "Existuje ještě %{count} pracovních balíčků s notifikacema."
other: "Existuje ještě %{count} pracovních balíčků s notifikacema."
open_in_browser: "Otevřít v prohlížeči"
reason:
watched: "Sledováno"
@@ -2681,7 +2681,7 @@ cs:
mentioned: "Zmíněné"
shared: "Sdílené"
subscribed: "vše"
prefix: "Obdrženo z důvodu nastavení oznámení: %{reason}"
prefix: "Obdrženo z důvodu nastavení notifikací: %{reason}"
date_alert_start_date: "Upozornění na datum"
date_alert_due_date: "Upozornění na datum"
see_all: "Zobrazit vše"
@@ -2955,7 +2955,7 @@ cs:
permission_move_work_packages: "Přesun pracovních balíčků"
permission_protect_wiki_pages: "Ochrana stránky wiki"
permission_rename_wiki_pages: "Přejmenovat stránky wiki"
permission_save_queries: "Uložit pohled"
permission_save_queries: "Uložit zobrazení"
permission_search_project: "Hledat projekt"
permission_select_custom_fields: "Vybrat vlastní pole"
permission_select_project_custom_fields: "Vyberte atributy projektu"
@@ -3350,7 +3350,7 @@ cs:
enable_subscriptions_text_html: Umožňuje uživatelům s nezbytnými oprávněními přihlásit se do OpenProject kalendářů a získat přístup k informacím o pracovním balíčku prostřednictvím externího klienta kalendáře. <strong>Poznámka:</strong> Před povolením si prosím přečtěte <a href="%{link}" target="_blank">iCalendar předplatné</a>.
language_name_being_default: "%{language_name} (výchozí)"
notifications:
events_explanation: "Určuje, pro kterou událost je odeslán e-mail. Pracovní balíčky jsou z tohoto seznamu vyloučeny, protože oznámení pro ně mohou být nastavena speciálně pro každého uživatele."
events_explanation: "Určuje, pro kterou událost je odeslán e-mail. Pracovní balíčky jsou z tohoto seznamu vyloučeny, protože notifikace pro ně mohou být nastavena speciálně pro každého uživatele."
delay_minutes_explanation: "Odesílání e-mailu může být pozdrženo, aby bylo uživatelům s nakonfigurovaným v oznámení aplikace před odesláním pošty potvrzeno oznámení. Uživatelé, kteří si přečtou oznámení v aplikaci, nedostanou e-mail pro již přečtené oznámení."
other: "Ostatní"
passwords: "Hesla"
@@ -3435,7 +3435,7 @@ cs:
text_destroy_with_associated: "Existují další objekty, které jsou přiřazeny k pracovním balíčkům a které mají být odstraněny. Tyto objekty jsou následující typy:"
text_destroy_what_to_do: "Co chcete udělat?"
text_diff_truncated: "... Toto rozlišení bylo zkráceno, protože přesahuje maximální velikost, kterou lze zobrazit."
text_email_delivery_not_configured: "Doručení e-mailu není nakonfigurováno a oznámení jsou zakázána.\nNakonfigurujte váš SMTP server pro jejich povolení."
text_email_delivery_not_configured: "Doručení e-mailu není nakonfigurováno a notifikace jsou zakázány.\nNakonfigurujte váš SMTP server pro jejich povolení."
text_enumeration_category_reassign_to: "Přiřadit je k této hodnotě:"
text_enumeration_destroy_question: "%{count} objektů je přiřazeno k této hodnotě."
text_file_repository_writable: "Do adresáře příloh lze zapisovat"
+14 -14
View File
@@ -51,7 +51,7 @@ de:
main-menu-border-color: "Rahmenfarbe des Hauptmenüs"
custom_colors: "Benutzerdefinierte Farben"
customize: "Passen Sie Ihre OpenProject Installation mit Ihrem eigenen Logo und eigenen Farben an."
enterprise_notice: "Diese kleine Erweiterung steht den Abonnenten der Enterprise edition ganz exklusiv als kleines Dankeschön für deren finanzielle Unterstützung zur Verfügung."
enterprise_notice: "Dieses kleine Add-on steht den Abonnenten der Enterprise-Edition ganz exklusiv als kleines Dankeschön für deren finanzielle Unterstützung zur Verfügung."
enterprise_more_info: "Hinweis: Das verwendete Logo wird öffentlich zugänglich sein."
manage_colors: "Farbauswahloptionen bearbeiten"
instructions:
@@ -64,15 +64,15 @@ de:
main-menu-bg-color: "Hintergrundfarbe des Menüs in der linken Seitenleiste."
theme_warning: Das Ändern des Themes wird Ihr benutzerdefiniertes Design überschreiben. Alle Änderungen werden dann verloren gehen. Sind Sie sicher, dass Sie fortfahren möchten?
enterprise:
upgrade_to_ee: "Auf Enterprise edition upgraden"
add_token: "Enterprise edition Support Token hochladen"
upgrade_to_ee: "Auf Enterprise-Edition upgraden"
add_token: "Enterprise-Edition Support Token hochladen"
delete_token_modal:
text: "Sind Sie sicher, dass Sie das aktuelle Enterprise edition token entfernen möchten?"
text: "Sind Sie sicher, dass Sie das aktuelle Enterprise Edition-Token entfernen möchten?"
title: "Token löschen"
replace_token: "Aktuellen Enterprise edition Support Token ersetzen"
order: "Enterprise on-premises bestellen"
paste: "Enterprise edition Support Token hier einfügen"
required_for_feature: "Dieses Add-on ist nur mit einem aktiven Enterprise edition Support-Token verfügbar."
paste: "Enterprise-Edition Support Token hier einfügen"
required_for_feature: "Dieses Add-on ist nur mit einem aktiven Enterprise-Edition Support-Token verfügbar."
enterprise_link: "Klicken Sie hier für weitere Informationen."
start_trial: "Kostenlose Testversion starten"
book_now: "Jetzt buchen"
@@ -1610,7 +1610,7 @@ de:
error_cookie_missing: "Das OpenProject Cookie fehlt. Bitte stellen Sie sicher, dass Cookies aktiviert sind, da diese Applikation ohne aktivierte Cookies nicht korrekt funktioniert."
error_custom_option_not_found: "Option ist nicht vorhanden."
error_enterprise_activation_user_limit: "Ihr Konto konnte nicht aktiviert werden (Nutzerlimit erreicht). Bitte kontaktieren Sie Ihren Administrator um Zugriff zu erhalten."
error_enterprise_token_invalid_domain: "Die Enterprise edition ist nicht aktiv. Die aktuelle Domain (%{actual}) entspricht nicht dem erwarteten Hostnamen (%{expected})."
error_enterprise_token_invalid_domain: "Die Enterprise-Edition ist nicht aktiv. Die aktuelle Domain (%{actual}) entspricht nicht dem erwarteten Hostnamen (%{expected})."
error_failed_to_delete_entry: "Fehler beim Löschen dieses Eintrags."
error_in_dependent: "Fehler beim Versuch, abhängiges Objekt zu ändern: %{dependent_class} #%{related_id} - %{related_subject}: %{error}"
error_in_new_dependent: "Fehler beim Versuch, abhängiges Objekt zu erstellen: %{dependent_class} - %{related_subject}: %{error}"
@@ -1775,10 +1775,10 @@ de:
blocks:
community: "OpenProject Community"
upsale:
title: "Auf Enterprise edition upgraden"
title: "Auf Enterprise-Edition upgraden"
more_info: "Weitere Informationen"
links:
upgrade_enterprise_edition: "Auf Enterprise edition upgraden"
upgrade_enterprise_edition: "Auf Enterprise-Edition upgraden"
postgres_migration: "Migration Ihrer Installation zu PostgreSQL"
user_guides: "Benutzerhandbuch"
faq: "Häufig gestellte Fragen"
@@ -1814,7 +1814,7 @@ de:
dates:
working: "%{date} ist jetzt ein Arbeitstag"
non_working: "%{date} ist jetzt ein arbeitsfreier Tag"
progress_mode_changed_to_status_based: Fortschrittberechnung wurde auf Status-basiert gesetzt
progress_mode_changed_to_status_based: Fortschrittberechnung wurde auf Status-bezogen gesetzt
status_excluded_from_totals_set_to_false_message: jetzt in den Gesamtwerten der Hierarchie enthalten
status_excluded_from_totals_set_to_true_message: jetzt von den Hierarchie-Gesamtwerten ausgeschlossen
status_percent_complete_changed: "% abgeschlossen von %{old_value}% auf %{new_value} % geändert"
@@ -2095,7 +2095,7 @@ de:
label_enumerations: "Aufzählungen"
label_enterprise: "Enterprise"
label_enterprise_active_users: "%{current}/%{limit} gebuchte aktive Nutzer"
label_enterprise_edition: "Enterprise edition"
label_enterprise_edition: "Enterprise Edition"
label_enterprise_support: "Enterprise Support"
label_enterprise_addon: "Enterprise Add-on"
label_environment: "Umgebung"
@@ -3044,8 +3044,8 @@ de:
update_timeout: "Speichere die Informationen bzgl. des genutzten Festplattenspeichers eines Projektarchivs für N Minuten.\nErhöhen Sie diesen Wert zur Verbesserung der Performance, da die Erfassung des genutzten Festplattenspeichers Ressourcen-intensiv ist."
oauth_application_details: "Der Client Geheimcode wird nach dem Schließen dieses Fensters nicht mehr zugänglich sein. Bitte kopieren Sie diese Werte in die Nextcloud OpenProject Integrationseinstellungen:"
oauth_application_details_link_text: "Zu den Einstellungen gehen"
setup_documentation_details: "Wenn Sie Hilfe bei der Konfiguration eines neuen Datei-Speichers benötigen, konsultieren Sie bitte die Dokumentation: "
setup_documentation_details_link_text: "Datei-Speicher einrichten"
setup_documentation_details: "Wenn Sie Hilfe bei der Konfiguration eines neuen Dateispeichers benötigen, konsultieren Sie bitte die Dokumentation: "
setup_documentation_details_link_text: "Dateispeicher einrichten"
show_warning_details: "Um diesen Dateispeicher nutzen zu können, müssen Sie das Modul und den spezifischen Speicher in den Projekteinstellungen jedes gewünschten Projekts aktivieren."
subversion:
existing_title: "Vorhandenes Subversion Projektarchiv"
@@ -3521,7 +3521,7 @@ de:
warning_user_limit_reached_admin: >
Das Hinzufügen zusätzlicher Benutzer überschreitet das aktuelle Benutzerlimit. Bitte <a href="%{upgrade_url}">aktualisieren Sie Ihr Abonnement</a> um sicherzustellen, dass externe Benutzer auf diese Instanz zugreifen können.
warning_user_limit_reached_instructions: >
Du hast dein Nutzerlimit erreicht (%{current}/%{max} active users). Bitte kontaktiere sales@openproject.com um deinen Enterprise edition Plan upzugraden und weitere Nutzer hinzuzufügen.
Du hast dein Nutzerlimit erreicht (%{current}/%{max} active users). Bitte kontaktiere sales@openproject.com um deinen Enterprise Edition Plan upzugraden und weitere Nutzer hinzuzufügen.
warning_protocol_mismatch_html: >
warning_bar:
+1 -1
View File
@@ -2085,7 +2085,7 @@ id:
label_file_plural: "File"
label_filter_add: "Tambah Filter"
label_filter: "Filter"
label_filter_plural: "Filter"
label_filter_plural: "Penyaring"
label_filters_toggle: "Tampilkan/Sembunyikan penyaringan"
label_float: "Float"
label_folder: "Folder"
+7 -7
View File
@@ -67,11 +67,11 @@ it:
upgrade_to_ee: "Aggiorna a Enterprise edition"
add_token: "Carica un token di assistenza per Enterprise edition"
delete_token_modal:
text: "Vuoi davvero rimuovere il token Enterprise edition attualmente utilizzato?"
text: "Vuoi davvero rimuovere il token Enterprise Edition attualmente utilizzato?"
title: "Elimina token"
replace_token: "Sostituisci il token di assistenza attuale"
order: "Ordina l'edizione Enterprise on-premises"
paste: "Incolla il tuo token di assistenza per Enterprise edition"
paste: "Incolla il tuo token di assistenza per Enterprise Edition"
required_for_feature: "Questa aggiunta è disponibile solo con un token di assistenza Enterprise Edition attivo."
enterprise_link: "Per ulteriori informazioni, clicca qui."
start_trial: "Inizia la prova gratuita"
@@ -816,7 +816,7 @@ it:
confirmation: "non coincide con %{attribute}."
could_not_be_copied: "%{dependency} non può essere (completamente) copiato."
does_not_exist: "non esiste."
error_enterprise_only: "%{action} è disponibile solo in OpenProject Enterprise edition"
error_enterprise_only: "%{action} è disponibile solo in OpenProject Enterprise Edition"
error_unauthorized: "potrebbe non essere accessibile."
error_readonly: "è in sola lettura, pertanto non è stato possibile modificarlo."
error_conflict: "L'informazione è stata aggiornata da almeno un altro utente nel frattempo."
@@ -1613,7 +1613,7 @@ it:
error_cookie_missing: "Il cookie di OpenProject è mancante. Prego, verifica che i cookie siano attivati, questa applicazione non funziona correttamente senza."
error_custom_option_not_found: "L'opzione non esiste."
error_enterprise_activation_user_limit: "Il tuo account potrebbe non essere attivo (raggiunto il limite utente). Si prega di contattare l'amministratore per ottenere l'accesso."
error_enterprise_token_invalid_domain: "L'Enterprise edition non è attiva. Il dominio del token Enterprise (%{actual}) non corrisponde al nome host del sistema (%{expected})."
error_enterprise_token_invalid_domain: "L'Enterprise Edition non è attiva. Il dominio del token Enterprise (%{actual}) non corrisponde al nome host del sistema (%{expected})."
error_failed_to_delete_entry: "Cancellazione voce non riuscita."
error_in_dependent: "Errore nel tentativo di modificare l'oggetto dipendente: %{dependent_class} #%{related_id} - %{related_subject}: %{error}"
error_in_new_dependent: "Errore nel tentativo di creare un oggetto dipendente: %{dependent_class} - %{related_subject}: %{error}"
@@ -1778,10 +1778,10 @@ it:
blocks:
community: "Comunità di OpenProject"
upsale:
title: "Aggiorna ad Enterprise edition"
title: "Aggiorna ad Enterprise Edition"
more_info: "Altre informazioni"
links:
upgrade_enterprise_edition: "Aggiorna ad Enterprise edition"
upgrade_enterprise_edition: "Aggiorna ad Enterprise Edition"
postgres_migration: "Migrazione dell'installazione su PostgreSQL"
user_guides: "Guide utente"
faq: "FAQ"
@@ -2098,7 +2098,7 @@ it:
label_enumerations: "Enumerazioni"
label_enterprise: "Enterprise"
label_enterprise_active_users: "%{current}/%{limit} utenti attivi riservati"
label_enterprise_edition: "Enterprise edition"
label_enterprise_edition: "Enterprise Edition"
label_enterprise_support: "Supporto per Imprese"
label_enterprise_addon: "Componente aggiuntivo Enterprise"
label_environment: "Ambiente"
+2 -2
View File
@@ -102,7 +102,7 @@ ca:
button_save: "Desa"
button_settings: "Configuració"
button_uncheck_all: "Desmarca-ho tot"
button_update: "Actualitza"
button_update: "Actualitzar"
button_export-pdf: "Descarregar PDF"
button_export-atom: "Descarregar Atom"
button_create: "Crear"
@@ -757,7 +757,7 @@ ca:
label: "Pausa els correu electrònic recordatori temporalment"
first_day: "Primer dia"
last_day: "Últim dia"
text_are_you_sure: "N'esteu segur?"
text_are_you_sure: "N'estas segur?"
text_data_lost: "Totes les dades entrades es perdran."
text_user_wrote: "%{value} va escriure:"
types:
+1 -1
View File
@@ -102,7 +102,7 @@ id:
button_save: "Simpan"
button_settings: "Pengaturan"
button_uncheck_all: "Uncek semua"
button_update: "Update"
button_update: "Perbarui"
button_export-pdf: "Download PDF"
button_export-atom: "Download Atom"
button_create: "Buat baru"
+1 -1
View File
@@ -102,7 +102,7 @@
button_save: "Lagre"
button_settings: "Innstillinger"
button_uncheck_all: "Avmerk alle"
button_update: "Oppdatèr"
button_update: "Oppdater"
button_export-pdf: "Last ned PDF"
button_export-atom: "Last ned Atom"
button_create: "Opprett"
+2 -2
View File
@@ -102,7 +102,7 @@ ro:
button_save: "Salvează"
button_settings: "Setări"
button_uncheck_all: "Deselectează tot"
button_update: "Actualizare"
button_update: "Actualizează"
button_export-pdf: "Descarcă PDF"
button_export-atom: "Descarcă Atom"
button_create: "Creează"
@@ -757,7 +757,7 @@ ro:
label: "Întrerupeți temporar memento-urile zilnice prin e-mail"
first_day: "Prima zi"
last_day: "Ultima zi"
text_are_you_sure: "Sunteți sigur?"
text_are_you_sure: "Ești sigur?"
text_data_lost: "Toate datele introduse vor fi pierdute."
text_user_wrote: "%{value} a scris:"
types:
+1 -1
View File
@@ -102,7 +102,7 @@ ru:
button_save: "Сохранить"
button_settings: "Настройки"
button_uncheck_all: "Снять все отметки"
button_update: "Обновление"
button_update: "Обновить"
button_export-pdf: "Скачать PDF"
button_export-atom: "Скачать Atom"
button_create: "Создать"
+1 -1
View File
@@ -102,7 +102,7 @@ vi:
button_save: "Lưu"
button_settings: "Cài đặt"
button_uncheck_all: "Bỏ chọn tất cả"
button_update: "Cập Nhật"
button_update: "Cập nhật"
button_export-pdf: "Tải xuống PDF"
button_export-atom: "Tải xuống Atom"
button_create: "Tạo"
+1 -1
View File
@@ -830,7 +830,7 @@ pl:
confirmation: "nie pasuje do %{attribute}."
could_not_be_copied: "Nie można było (w pełni) skopiować %{dependency}."
does_not_exist: "nie istnieje."
error_enterprise_only: "%{action} jest dostępna tylko w OpenProject Enterprise edition"
error_enterprise_only: "%{action} jest dostępna tylko w OpenProject Enterprise Edition"
error_unauthorized: "— nie można uzyskac dostępu."
error_readonly: "— podjęto próbę zapisu, ale nie jest zapisywalny."
error_conflict: "Information has been updated by at least one other user in the meantime."
+2 -2
View File
@@ -2123,7 +2123,7 @@ ro:
label_duplicated_by: "dublat de"
label_duplicate: "duplicat"
label_duplicates: "dublează"
label_edit: "Editare"
label_edit: "Editează"
label_edit_x: "Editare: %{x}"
label_enable_multi_select: "Comutare selecție multiplă"
label_enabled_project_custom_fields: "Câmpuri personalizate activate"
@@ -2175,7 +2175,7 @@ ro:
label_generate_key: "Generare cheie"
label_git_path: "Calea catre directorul .git"
label_greater_or_equal: ">="
label_group_by: "Grupare după"
label_group_by: "Grupează după"
label_group_new: "Grupare nouă"
label_group: "Grup"
label_group_named: "Grup %{name}"
+2 -2
View File
@@ -1521,8 +1521,8 @@ sl:
- "avgust"
- "september"
- "oktober"
- "November"
- "December"
- "november"
- "december"
order:
- :leto
- :mesec
+1 -1
View File
@@ -1247,7 +1247,7 @@ tr:
base: "Genel Hata:"
blocks_ids: "Engellenen iş paketlerinin ID'leri"
category: "Kategori"
comment: "Yorum"
comment: "Yorumlar"
comments: "Yorum"
content: "İçerik"
color: "Renk"
+1 -1
View File
@@ -2231,7 +2231,7 @@ uk:
label_index_by_title: "Індекс за назвою"
label_information: "Інформація"
label_information_plural: "Інформація"
label_installation_guides: "Інструкції зі встановлення"
label_installation_guides: "Інструкції із встановлення"
label_integer: "Ціле число"
label_internal: "Власне"
label_introduction_video: "Введення відео"
+1 -1
View File
@@ -2094,7 +2094,7 @@ vi:
label_file_plural: "Tệp"
label_filter_add: "Thêm bộ lọc"
label_filter: "Bộ lọc"
label_filter_plural: "Bộ lọc"
label_filter_plural: "Các bộ lọc"
label_filters_toggle: "Hiển thị/ẩn bộ lọc"
label_float: "Số thực"
label_folder: "Thư mục"
+2 -2
View File
@@ -81,7 +81,7 @@ zh-CN:
demo-project:
name: 演示项目
status_explanation: 所有任务都按计划进行。相关人员均知晓各自任务。系统已完全建立。
description: 这是对此演示项目目标的简短摘要。
description: 这是对此演示 Scrum 项目目标的简短摘要。
news:
item_0:
title: 欢迎来到您的演示项目
@@ -199,7 +199,7 @@ zh-CN:
scrum-project:
name: Scrum 项目
status_explanation: 所有任务都按计划进行。相关人员均知晓各自任务。系统已完全建立。
description: 这是对此演示Scrum项目目标的简短摘要。
description: 这是对此演示 Scrum 项目目标的简短摘要。
news:
item_0:
title: 欢迎来到您的 Scrum 演示项目
+5 -5
View File
@@ -70,7 +70,7 @@ zh-CN:
text: "您确定要删除当前使用的企业版令牌吗?"
title: "删除令牌"
replace_token: "替换您当前的支持令牌"
order: "订购本地部署的 Enterprise edition"
order: "订购本地部署的 Enterprise edition"
paste: "粘贴您企业版的支持令牌"
required_for_feature: "此功能仅限具激活的企业版支持令牌的订阅者使用。"
enterprise_link: "如需了解详细信息,请单击此处。"
@@ -2350,7 +2350,7 @@ zh-CN:
label_revision_id: "修订版本 %{value}"
label_revision_plural: "修订"
label_roadmap: "路线图"
label_roadmap_edit: "编辑路线图 %{name}"
label_roadmap_edit: "编辑路线图%{name}"
label_roadmap_due_in: "%{value} 到期"
label_roadmap_no_work_packages: "该版本没有工作包。"
label_roadmap_overdue: "%{value} 超时"
@@ -3000,7 +3000,7 @@ zh-CN:
managed: "在 OpenProject 中创建新的存储库"
storage:
not_available: "磁盘存储开销不可用于此存储库。"
update_timeout: "在 N 分钟内保留存储库最后所需磁盘空间信息。由于计算存储库所需的磁盘空间可能增加系统开销,增加该值可以减少性能影响。"
update_timeout: "在 N 分钟内保留存储库最后所需磁盘空间信息。由于计算存储库所需的磁盘空间可能增加系统开销,增加该值可以减少性能影响。"
oauth_application_details: "关闭此窗口后,将无法再次访问客户端密钥值。请将这些值复制到 Nextcloud OpenProject 集成设置中:"
oauth_application_details_link_text: "转到设置页面"
setup_documentation_details: "如果您在配置新文件存储方面需要帮助,请查看文档:"
@@ -3160,7 +3160,7 @@ zh-CN:
setting_session_ttl_hint: "当设置的值低于5时,其作用类似于禁用。"
setting_session_ttl_enabled: "会话过期"
setting_start_of_week: "一周起始日"
setting_sys_api_enabled: "启用版本库管理 web 服务"
setting_sys_api_enabled: "启用存储库管理网页服务"
setting_sys_api_description: "存储库管理网页服务提供了集成的,用户授权的存储库访问。"
setting_time_format: "时间"
setting_total_percent_complete_mode: "计算 完成% 层次结构总数"
@@ -3479,7 +3479,7 @@ zh-CN:
warning_user_limit_reached_admin: >
添加额外的用户将超出当前限制。请<a href="%{upgrade_url}">升级您的计划</a>,以确保外部用户能够访问此实例。
warning_user_limit_reached_instructions: >
您达到用户限制(%{current}/%{max}活跃用户)。 请联系sales@openproject.com升级您的Enterprise edition计划添加其他用户。
达到用户限制(%{current}/%{max} 活跃用户)。请联系 sales@openproject.com 升级您的企业版计划添加额外用户。
warning_protocol_mismatch_html: >
warning_bar:
+4 -4
View File
@@ -2090,7 +2090,7 @@ zh-TW:
label_file_plural: "檔案"
label_filter_add: "新增條件"
label_filter: "篩選條件"
label_filter_plural: "篩選"
label_filter_plural: "篩選條件"
label_filters_toggle: "顯示/隱藏篩選條件"
label_float: "浮點數"
label_folder: "資料夾"
@@ -2103,7 +2103,7 @@ zh-TW:
label_generate_key: "產生一個金鑰"
label_git_path: ".git 目錄的路徑"
label_greater_or_equal: ">="
label_group_by: "分組依據"
label_group_by: "分"
label_group_new: "新增群組"
label_group: "群組"
label_group_named: "群組名稱 %{name}"
@@ -2115,7 +2115,7 @@ zh-TW:
label_hierarchy: "階層"
label_hierarchy_leaf: "頁面結構頁"
label_home: "Home"
label_subject_or_id: "主旨或 id"
label_subject_or_id: "名稱或 id"
label_calendar_subscriptions: "訂閱行事曆"
label_identifier: "識別碼"
label_in: "在"
@@ -2159,7 +2159,7 @@ zh-TW:
label_latest_revision_plural: "最新版本"
label_ldap_authentication: "LDAP 認證"
label_learn_more: "了解更多"
label_less_or_equal: "<="
label_less_or_equal: "之後"
label_less_than_ago: "幾天內"
label_link_url: "連結(URL)"
label_list: "清單"
@@ -0,0 +1,16 @@
require_relative "20231201085450_change_view_of_queries_with_timeline_to_gantt"
# Inherit from the original migration `ChangeViewOfQueriesWithTimelineToGantt`
# to avoid duplicating it.
#
# The original migration was fine, but it was applied too early: in OpenProject
# 13.2.0 the migration would already have been run and it was still possible to
# create Gantt queries inside the work packages module. Such queries were not
# migrated.
#
# This was registered as bug #56769.
#
# This migration runs the original migration again to ensure all queries
# displayed as Gantt charts are displayed in the right module.
class ChangeViewOfQueriesWithTimelineToGanttAgain < ChangeViewOfQueriesWithTimelineToGantt
end
+57 -15
View File
@@ -8,21 +8,65 @@ release_date: 2024-09-26
# OpenProject 14.6.0
Release date: 2024-09-26
Release date: 2024-10-09
We released OpenProject [OpenProject 14.6.0](https://community.openproject.org/versions/2111).
The release contains several bug fixes and we recommend updating to the newest version.
In these Release Notes, we will give an overview of important feature changes.
At the end, you will find a complete list of all changes and bug fixes.
We released OpenProject [OpenProject 14.6.0](https://community.openproject.org/versions/2111). The release contains several bug fixes and we recommend updating to the newest version.
In these Release Notes, we will give an overview of important feature changes. At the end, you will find a complete list of all changes and bug fixes.
## Important feature changes
<!-- Inform about the major features in this section -->
### Updated progress reporting with most flexible options
## Important updates and breaking changes
In response to valuable user feedback, OpenProject 14.6 brings important changes to progress reporting. We greatly appreciate the input from our Community, which helped shape these updates. Based on your feedback, the % Complete field is now manually editable again in work-based mode (like it has been in the versions before 14.0), removing the previous requirement to input Work or Remaining Work. This gives users more flexibility in tracking project progress.
<!-- Remove this section if empty, add to it in pull requests linking to tickets and provide information -->
But we did not only revise the changes we made with 14.0, we also added new options to enhance progress tracking and make it most flexible for our users. This is why, additionally, administrators now have new settings for progress calculation and % Complete hierarchy totals:
![Screenshot of the new admin page for progress tracking with OpenProject 14.6](progress-tracking-admin-options.png)
If you use our progress tracking, we advise reading [this detailed article about progress reporting with OpenProject 14.6](https://www.openproject.org/blog/updates-to-progress-tracking-in-14-6-based-on-user-feedback/) from our product team.
### Meetings: Receive an update notification with reload option
If you have not used our Meetings module, you should consider starting it now. We updated dynamic meetings so that you now receive a notification whenever someone else made changes to the meeting you're looking at. Click on the button included in the notification to reload the page. This is a particularly great improvement for teams who work simultaneously in meetings.
Please note that if you reload the page, any unsaved changes you have made will be lost. We therefore recommend that you save your changes before clicking the Reload button, or even save them in a different location if they are extensive.
![Screenshot of the OpenProject meetings module, showing the notification: This page has been updated by someone else. Reload to view changes.](openproject-14-6-meetings-reload.png)
### Enable and disable a custom field for multiple projects at once
In OpenProject 14.6, administrators can now save time by enabling or disabling custom fields for multiple projects simultaneously. This feature streamlines the process of managing custom fields across projects, making it easier and more efficient for administrators.
A new tab navigation has been introduced under *Administration* > *Custom Fields*, similar to the project attributes interface. This section displays a list of all projects where a specific custom field is activated. Administrators can easily add or remove projects from the list using a menu within each row, without the need for confirmation.
Additionally, users can include sub-projects when adding, which automatically selects all sub-projects within the hierarchy. Already added projects are visible but deactivated in the dropdown.
![Screenshot showing the new administration page to add custom fields to multiple projects](open-project-14-6-custom-fields-new-highlighted.png)
Learn more about [custom fields and how to create them](../../user-guide/projects/project-settings/custom-fields/) in our user guide.
### Use relative work package attribute macros
In OpenProject 14.6, users can now use descriptions with embedded macros. This feature ensures consistent descriptions across work packages and eliminates the need to manually replace placeholders for each work package attribute.
This is particularly helpful if you want to work with templates, as the copied work package automatically references its own attributes. Also, this feature will be very helpful for the [upcoming feature to generate PDFs from work package descriptions](https://community.openproject.org/wp/45896).
Macros such as *workPackageValue:assignee* have been implemented, allowing the dynamic display of work package specific values like the assignee directly in the template. These macros support both work package and project values and labels, making it easier to generate consistent and accurate documentation. Of course, you can still reference a specific work package by including the ID (e.g. *workPackageValue:1234:assignee*).
![Screenshot showing a work package with macros in the description](openproject-14-6-macros.png)
See our [documentation for a list of available attributes for work packages](../../user-guide/wysiwyg/#available-attributes-for-work-packages).
### Show empty lines in saved rich text
Before 14.6, OpenProject's editors, such as in the work package description, did automatically delete empty lines when saved. Now, empty rows are shown in show mode, edit mode, and are not removed when saving text fields.
### See past meetings included in the number next to the Meetings tab
On the Meetings tab in the split screen view, the number next to the “Meetings (2)” tab should include both current and past meetings. Previously, only future meetings were counted. So if you use the Meetings module and reference work packages there, you may notice a higher number on the work package tab for meetings.
### Changes to design settings in administration
[Design settings in OpenProject administration](../../system-admin-guide/design) were split into several sections, to make navigation easier and eliminate scrolling down the page to find the correct setting.
<!--more-->
## Bug fixes and changes
@@ -91,11 +135,9 @@ At the end, you will find a complete list of all changes and bug fixes.
<!-- Warning: Anything above this line will be automatically removed by the release script -->
## Contributions
A very special thank you goes to our sponsors for this release.
Also a big thanks to our Community members for reporting bugs and helping us identify and provide fixes.
Special thanks for reporting and finding bugs go to Jan H, Joris Ceelen, Ivan Kuchin, André van Kaam, Christian Jeschke.
A very special thank you goes to City of Cologne again for sponsoring features in project lists. Also, a big thanks to our Community members for reporting bugs and helping us identify and provide fixes.
Special thanks for reporting and finding bugs go to Jan H, Joris Ceelen, André van Kaam, and Christian Jeschke.
Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings!
Would you like to help out with translations yourself?
Then take a look at our translation guide and find out exactly how you can contribute.
It is very much appreciated!
Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! This release, we would like to highlight [DKrukoff](https://crowdin.com/profile/dkrukoff), for an outstanding number of translations into Russian.
Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated!
Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

+14 -14
View File
@@ -47,7 +47,7 @@
"@ngneat/content-loader": "^7.0.0",
"@ngx-formly/core": "^6.1.4",
"@openproject/octicons-angular": "^19.18.0",
"@openproject/primer-view-components": "^0.47.0",
"@openproject/primer-view-components": "^0.47.1",
"@openproject/reactivestates": "^3.0.1",
"@primer/css": "^21.3.3",
"@types/hotwired__turbo": "^8.0.1",
@@ -4821,9 +4821,9 @@
}
},
"node_modules/@openproject/primer-view-components": {
"version": "0.47.0",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.0.tgz",
"integrity": "sha512-bJiz0tpUYIu+1a3f6KwJC5RgXB+bOVbct5v4SBP8/Grjfdk8qJiZqlY7aZqJvoHLQS5uU4v287u3hbkeUeE6Ww==",
"version": "0.47.1",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.1.tgz",
"integrity": "sha512-knxRfNDnm4DAEQUyxamOON9RqBh/u4/8QSjQbk2LdhcDZBPU66Xqy2dMyE5HmjJfbOHIVgYne08p05DXLH9NYQ==",
"dependencies": {
"@github/auto-check-element": "^5.2.0",
"@github/auto-complete-element": "^3.6.2",
@@ -4907,9 +4907,9 @@
},
"node_modules/@primer/view-components": {
"name": "@openproject/primer-view-components",
"version": "0.47.0",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.0.tgz",
"integrity": "sha512-bJiz0tpUYIu+1a3f6KwJC5RgXB+bOVbct5v4SBP8/Grjfdk8qJiZqlY7aZqJvoHLQS5uU4v287u3hbkeUeE6Ww==",
"version": "0.47.1",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.1.tgz",
"integrity": "sha512-knxRfNDnm4DAEQUyxamOON9RqBh/u4/8QSjQbk2LdhcDZBPU66Xqy2dMyE5HmjJfbOHIVgYne08p05DXLH9NYQ==",
"dependencies": {
"@github/auto-check-element": "^5.2.0",
"@github/auto-complete-element": "^3.6.2",
@@ -25411,9 +25411,9 @@
}
},
"@openproject/primer-view-components": {
"version": "0.47.0",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.0.tgz",
"integrity": "sha512-bJiz0tpUYIu+1a3f6KwJC5RgXB+bOVbct5v4SBP8/Grjfdk8qJiZqlY7aZqJvoHLQS5uU4v287u3hbkeUeE6Ww==",
"version": "0.47.1",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.1.tgz",
"integrity": "sha512-knxRfNDnm4DAEQUyxamOON9RqBh/u4/8QSjQbk2LdhcDZBPU66Xqy2dMyE5HmjJfbOHIVgYne08p05DXLH9NYQ==",
"requires": {
"@github/auto-check-element": "^5.2.0",
"@github/auto-complete-element": "^3.6.2",
@@ -25468,7 +25468,7 @@
"integrity": "sha512-mBq0F6lvAuPioW30RP1CyvSkW76UpAzZp1HM+5N/cfpwuarYVsCWYkWQlDtJqIsGYNSa1E2GgL17HzzDt4Bofg==",
"requires": {
"@primer/primitives": "^9.0.3",
"@primer/view-components": "npm:@openproject/primer-view-components@^0.47.0"
"@primer/view-components": "npm:@openproject/primer-view-components@^0.47.1"
}
},
"@primer/primitives": {
@@ -25481,9 +25481,9 @@
}
},
"@primer/view-components": {
"version": "npm:@openproject/primer-view-components@0.47.0",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.0.tgz",
"integrity": "sha512-bJiz0tpUYIu+1a3f6KwJC5RgXB+bOVbct5v4SBP8/Grjfdk8qJiZqlY7aZqJvoHLQS5uU4v287u3hbkeUeE6Ww==",
"version": "npm:@openproject/primer-view-components@0.47.1",
"resolved": "https://registry.npmjs.org/@openproject/primer-view-components/-/primer-view-components-0.47.1.tgz",
"integrity": "sha512-knxRfNDnm4DAEQUyxamOON9RqBh/u4/8QSjQbk2LdhcDZBPU66Xqy2dMyE5HmjJfbOHIVgYne08p05DXLH9NYQ==",
"requires": {
"@github/auto-check-element": "^5.2.0",
"@github/auto-complete-element": "^3.6.2",
+2 -2
View File
@@ -99,7 +99,7 @@
"@ngneat/content-loader": "^7.0.0",
"@ngx-formly/core": "^6.1.4",
"@openproject/octicons-angular": "^19.18.0",
"@openproject/primer-view-components": "^0.47.0",
"@openproject/primer-view-components": "^0.47.1",
"@openproject/reactivestates": "^3.0.1",
"@primer/css": "^21.3.3",
"@types/hotwired__turbo": "^8.0.1",
@@ -176,6 +176,6 @@
"generate-typings": "tsc -d -p src/tsconfig.app.json"
},
"overrides": {
"@primer/view-components": "npm:@openproject/primer-view-components@^0.47.0"
"@primer/view-components": "npm:@openproject/primer-view-components@^0.47.1"
}
}
@@ -36,6 +36,7 @@ $op-primer-flash-toaster-width: 80%
left: 10%
right: 10%
top: 1rem
background-color: var(--body-background)
// Align multiple toasts
display: flex
@@ -28,7 +28,7 @@ ro:
work_package:
position: "Poziție"
story_points: "Puncte"
backlogs_work_package_type: "Tip restanță"
backlogs_work_package_type: "Tipul de restante"
errors:
models:
work_package:
@@ -21,7 +21,7 @@
#++
zh-TW:
plugin_openproject_backlogs:
name: "OpenProject辦事項"
name: "OpenProject辦事項"
description: "此模組新增了讓敏捷團隊能夠在 Scrum 專案中使用 OpenProject 的功能。"
activerecord:
attributes:
+1 -1
View File
@@ -58,7 +58,7 @@ fr:
perform_description: "Voulez-vous importer ou mettre à jour les problèmes repris ci-dessus ?"
replace_with_system_user: 'Les remplacer par l''utilisateur "Système"'
import_as_system_user: 'Les importer comme utilisateur "Système".'
what_to_do: "Que voulez-vous faire?"
what_to_do: "Que voulez-vous faire?"
work_package_has_newer_changes: "Obsolète ! Ce sujet n'a pas été mis à jour, car les derniers changements sur le serveur étaient plus récents que la \"ModifiedDate\" du sujet importé. Toutefois, les commentaires sur le sujet ont été importés."
bcf_file_not_found: "Impossible de localiser le fichier BCF. Veuillez recommencer le processus de téléversement."
export:
@@ -27,7 +27,7 @@ cs:
budget:
author: "Autor"
available: "Dostupné"
budget: "Rozpočet"
budget: "Plánované"
budget_ratio: "Stráveno (poměr)"
description: "Popis"
spent: "Strávený čas"
@@ -1,7 +1,7 @@
zh-CN:
plugin_openproject_ldap_groups:
name: "OpenProject LDAP 组"
description: "LDAP 组成员同步。"
description: "LDAP组成员同步。"
activerecord:
attributes:
ldap_groups/synchronized_group:
@@ -9,7 +9,7 @@ zh-TW:
ldap_auth_source: 'LDAP 連線'
sync_users: '同步使用者'
ldap_groups/synchronized_filter:
filter_string: '簡約登入目錄制約(LDAP)篩選'
filter_string: 'LDAP篩選條件'
ldap_auth_source: 'LDAP 連線'
group_name_attribute: "群組名字屬性"
sync_users: '同步使用者'
@@ -139,7 +139,7 @@ cs:
types:
classic: "Klasické"
classic_text: "Uspořádat schůzku do formátů textového programu a protokolu."
structured: "Dynamická"
structured: "Dynamický"
structured_text: "Uspořádat schůzku jako seznam bodů pořadu jednání, případně je propojit s pracovním balíčkem."
structured_text_copy: "Kopírování schůzky v současné době nezkopíruje související body pořadu jednání, jen podrobnosti"
copied: "Zkopírováno ze schůzky #%{id}"
@@ -153,7 +153,7 @@ cs:
notice_meeting_updated: "This page has been updated by someone else. Reload to view changes."
permission_create_meetings: "Vytvořit schůzku\n"
permission_edit_meetings: "Upravit schůzku"
permission_delete_meetings: "Smazat schůzku"
permission_delete_meetings: "Odstranit schůzky"
permission_view_meetings: "Zobrazit schůzky"
permission_create_meeting_agendas: "Vytvořit agendy schůzek"
permission_create_meeting_agendas_explanation: "Umožňuje upravovat obsah programu klasické schůzky."
@@ -156,7 +156,7 @@ zh-TW:
permission_create_meeting_agendas_explanation: "允許編輯傳統會議的議程。"
permission_manage_agendas: "管理議程"
permission_manage_agendas_explanation: "允許編輯動態會議的議程項目。"
permission_close_meeting_agendas: "定案會議大綱"
permission_close_meeting_agendas: "結束會議大綱"
permission_send_meeting_agendas_notification: "傳送會議大綱審閱通知"
permission_create_meeting_minutes: "管理會議記錄"
permission_send_meeting_minutes_notification: "傳送會議記錄審閱通知"
@@ -68,7 +68,7 @@ ro:
label_filter: "Filtrare"
label_filter_add: "Adăugare filtru"
label_filter_plural: "Filtre"
label_group_by: "Grupare după"
label_group_by: "Grupează după"
label_group_by_add: "Adăugați atributul Group-by"
label_inactive: "Inactiv"
label_no: "Nu"
@@ -51,7 +51,7 @@ zh-TW:
label_money: "現金價值"
label_month_reporting: "月"
label_new_report: "新建成本報表"
label_open: "進行中"
label_open: "開啟"
label_operator: "操作員"
label_private_report_plural: "私密成本報告"
label_progress_bar_explanation: "產生報告中..."
@@ -68,7 +68,7 @@ zh-TW:
label_filter: "篩選條件"
label_filter_add: "新增篩選條件"
label_filter_plural: "篩選條件"
label_group_by: "分組依據"
label_group_by: "分"
label_group_by_add: "新增分組依據屬性"
label_inactive: "«不活動»"
label_no: "否"
@@ -129,8 +129,7 @@ class Storages::Admin::Storages::ProjectStoragesController < ApplicationControll
delete_service.on_success do
update_flash_message_via_turbo_stream(
message: I18n.t(:notice_successful_delete),
full: true, dismiss_scheme: :hide, scheme: :success
message: I18n.t(:notice_successful_delete), scheme: :success
)
update_project_list_via_turbo_stream(url_for_action: :index)
end
@@ -138,8 +137,7 @@ class Storages::Admin::Storages::ProjectStoragesController < ApplicationControll
delete_service.on_failure do |failure|
error = failure.errors.map(&:message).to_sentence
render_error_flash_message_via_turbo_stream(
message: I18n.t("project_storages.remove_project.deletion_failure_flash", error:),
full: true, dismiss_scheme: :hide
message: I18n.t("project_storages.remove_project.deletion_failure_flash", error:)
)
end
@@ -151,9 +149,7 @@ class Storages::Admin::Storages::ProjectStoragesController < ApplicationControll
def load_project_storage
@project_storage = Storages::ProjectStorage.find(params[:id])
rescue ActiveRecord::RecordNotFound
update_flash_message_via_turbo_stream(
message: t(:notice_file_not_found), full: true, dismiss_scheme: :hide, scheme: :danger
)
render_error_flash_message_via_turbo_stream(message: t(:notice_file_not_found))
update_project_list_via_turbo_stream
respond_with_turbo_streams
@@ -175,8 +171,7 @@ class Storages::Admin::Storages::ProjectStoragesController < ApplicationControll
respond_with_turbo_streams
end
rescue ActiveRecord::RecordNotFound
update_flash_message_via_turbo_stream message: t(:notice_project_not_found), full: true, dismiss_scheme: :hide,
scheme: :danger
render_error_flash_message_via_turbo_stream(message: t(:notice_project_not_found))
update_project_list_via_turbo_stream
respond_with_turbo_streams
@@ -214,11 +209,8 @@ class Storages::Admin::Storages::ProjectStoragesController < ApplicationControll
def ensure_storage_configured!
return if @storage.configured?
update_flash_message_via_turbo_stream(
message: I18n.t("storages.enabled_in_projects.setup_incomplete_description"),
full: true,
dismiss_scheme: :hide,
scheme: :danger
render_error_flash_message_via_turbo_stream(
message: I18n.t("storages.enabled_in_projects.setup_incomplete_description")
)
respond_with_turbo_streams
false
@@ -18,7 +18,7 @@ fr:
today: 'Aujourd''hui'
drag_here_to_remove: 'Faites glisser ici pour supprimer le responsable et les dates de début et de fin.'
cannot_drag_here: 'Impossible de supprimer le lot de travaux en raison des autorisations ou des restrictions d''édition.'
cannot_drag_to_non_working_day: 'Ce lot de travail ne peut pas démarrer/terminer sur un jour non ouvré.'
cannot_drag_to_non_working_day: 'Ce lot de travaux ne peut pas démarrer/terminer sur un jour non ouvré.'
quick_add:
empty_state: 'Utilisez le champ de recherche pour trouver des lots de travaux et faites-les glisser vers le planificateur pour l''assigner à quelqu''un et définir des dates de début et de fin.'
search_placeholder: 'Rechercher...'
@@ -174,7 +174,7 @@ ro:
label_expiration_hint: "%{date} sau la deconectare"
label_actions: "Acțiuni"
label_confirmed: "Confirmat"
button_continue: "Continuaţi"
button_continue: "Continuă"
button_make_default: "Marcați ca implicit"
label_unverified_phone: "Telefonul mobil nu a fost încă verificat"
notice_phone_number_format: "Vă rugăm să introduceți numărul în următorul format: +XX XXXXXXXX."
@@ -174,7 +174,7 @@ ru:
label_expiration_hint: "%{date} или при выходе из системы"
label_actions: "Действия"
label_confirmed: "Подтвержден"
button_continue: "Далее"
button_continue: "Продолжить"
button_make_default: "Задать по умолчанию"
label_unverified_phone: "Сотовый телефон еще не подтвержден"
notice_phone_number_format: "Введите номер в следующем формате: +XX XXXXXXXX."
@@ -115,7 +115,7 @@ uk:
failed_to_delete: "Не вдалося видалити пристрій 2FA."
is_default_cannot_delete: "Пристрій позначено як типовий і його не можна видалити через активну політику безпеки. Перед видаленням позначте інший пристрій як стандартний."
not_existing: "Для вашого облікового запису не зареєстровано жодного пристрою 2FA."
2fa_from_input: Введіть код, що надійшов на пристрій %{device_name}, щоб підтвердити свою особу.
2fa_from_input: Введіть код, отриманий на пристрій %{device_name}, щоб підтвердити свою особу.
2fa_from_webauthn: Укажіть пристрій WebAuthn <strong>%{device_name}</strong>. Якщо це USB-пристрій, переконайтеся, що його підключено, і торкніться його. Потім натисніть кнопку входу.
webauthn:
title: "WebAuthn"
@@ -13,4 +13,4 @@ zh-CN:
xls_with_relations: "带关系的 XLS"
xls_export:
child_of: 此项的子项
parent_of: 此项的父
parent_of: 此项的父
+56
View File
@@ -0,0 +1,56 @@
# frozen_string_literal: true
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) 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.
#++
require "spec_helper"
RSpec.describe "Statuses", :skip_csrf, type: :rails_request do
shared_let(:admin) { create(:admin) }
current_user { admin }
describe "POST /statuses" do
it "creates a new status" do
post statuses_path, params: { status: { name: "New Status" } }
expect(Status.find_by(name: "New Status")).not_to be_nil
expect(response).to redirect_to(statuses_path)
end
context "with empty % Complete" do
it "displays an error" do
post statuses_path, params: { status: { name: "New status", default_done_ratio: "" } }
expect(response).to have_http_status(:success)
expect(response).to render_template("new")
expect(response.body).to include("% Complete must be between 0 and 100.")
end
end
end
end