From 1c23c31ad6d90096f71a9716131904fa2055cc39 Mon Sep 17 00:00:00 2001 From: Henriette Darge Date: Tue, 31 Mar 2026 11:45:23 +0200 Subject: [PATCH 1/3] Pass model to text formatter to get correct project context if possible --- .../display_fields/rich_text_area_component.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/open_project/common/inplace_edit_fields/display_fields/rich_text_area_component.rb b/app/components/open_project/common/inplace_edit_fields/display_fields/rich_text_area_component.rb index 2deb5e999ef..83467d90fa3 100644 --- a/app/components/open_project/common/inplace_edit_fields/display_fields/rich_text_area_component.rb +++ b/app/components/open_project/common/inplace_edit_fields/display_fields/rich_text_area_component.rb @@ -49,7 +49,7 @@ module OpenProject field_value, lines: 3) else - format_text(field_value) + format_text(field_value, object: model) end else t("placeholders.default") From 4a5d0f3e1d996ac723e91d29107f8d6c1732dceb Mon Sep 17 00:00:00 2001 From: Henriette Darge Date: Wed, 1 Apr 2026 08:54:52 +0200 Subject: [PATCH 2/3] Apply button styles only when container query is met --- frontend/src/global_styles/primer/_overrides.sass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/global_styles/primer/_overrides.sass b/frontend/src/global_styles/primer/_overrides.sass index 6635868ab80..0446465a5cd 100644 --- a/frontend/src/global_styles/primer/_overrides.sass +++ b/frontend/src/global_styles/primer/_overrides.sass @@ -180,5 +180,5 @@ ul.SegmentedControl, grid-template-columns: min-content 1fr min-content grid-template-rows: min-content min-content - & .Banner-actions - margin: var(--base-size-8) 0 0 var(--base-size-8) + & .Banner-actions + margin: var(--base-size-8) 0 0 var(--base-size-8) From 76ea2c83c4633ee77b4a4b29b48141a0d3046336 Mon Sep 17 00:00:00 2001 From: Tomas Hykel Date: Wed, 1 Apr 2026 12:33:09 +0200 Subject: [PATCH 3/3] [#73605] Add missing permission to fix identifier suggestion for sub-project creation --- config/initializers/permissions.rb | 3 ++- .../projects/identifier_suggestion_spec.rb | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/config/initializers/permissions.rb b/config/initializers/permissions.rb index 2544d40ef81..9d7eca42f1e 100644 --- a/config/initializers/permissions.rb +++ b/config/initializers/permissions.rb @@ -249,7 +249,8 @@ Rails.application.reloader.to_prepare do require: :member map.permission :add_subprojects, - { projects: %i[new create] }, + { projects: %i[new create], + "projects/identifier_suggestion": %i[show] }, permissible_on: :project, require: :member diff --git a/spec/requests/projects/identifier_suggestion_spec.rb b/spec/requests/projects/identifier_suggestion_spec.rb index 159f8d7d155..af3a39e035f 100644 --- a/spec/requests/projects/identifier_suggestion_spec.rb +++ b/spec/requests/projects/identifier_suggestion_spec.rb @@ -71,6 +71,26 @@ RSpec.describe "GET /projects/identifier_suggestion", type: :rails_request do expect(response).to have_http_status(:unauthorized).or have_http_status(:redirect) end end + + context "when user has no permissions" do + current_user { create(:user) } + + it "returns forbidden" do + get "/projects/identifier_suggestion", params: { name: "Test" }, as: :json + expect(response).to have_http_status(:forbidden) + end + end + + context "when user has add_subprojects permission on a project" do + let(:project) { create(:project, identifier: "PRNT") } + + current_user { create(:user, member_with_permissions: { project => %i[add_subprojects] }) } + + it "returns a suggestion" do + get "/projects/identifier_suggestion", params: { name: "Test" }, as: :json + expect(response).to have_http_status(:ok) + end + end end context "with numeric (legacy) identifiers", with_settings: { work_packages_identifier: "numeric" } do