2947 Commits

Author SHA1 Message Date
Henriette Darge 396de9362f [74625] Make project hierarchy collapsable in the global project selector (#23137)
* Use new async FilterableTreeView for global project selector

* Remove replaced angular component

* Fine tune sorting and expansion state of the new project selector

* Update primer to 0.86.1

* Add workspace information and filter results hierarchy information to project selector

* Include review feedback: Harmonize I18n keys, fix visible scope, use guarded local storage

* Add a turboFrame in the project select overlay to only load the projects when it is actually opened

* Restore BIM tab styles which were broken for a while already but the new project selector changes made it so bad that the test broke because the plus icon was overlapping the checkbox

* Clarify spec expectation
2026-06-08 08:14:47 +02:00
Alexander Brandon Coles 0b4bcb5d3c Set accessible names on table column headers
capybara_accessible_selectors 0.16 resolves role selectors such as
`:columnheader` by the computed accessible name. In a browser that name
folds in the CSS `text-transform: uppercase` styling and the column
action-menu trigger text, so `have_columnheader("Subject")` no longer
matches a header whose accessible name resolves to "SUBJECT Open menu".

Sets an explicit `aria-label` equal to the plain caption on each header
cell, in both the server-rendered tables and the work package table, so
the accessible name is the column title alone. This also improves screen
reader output, which previously announced the uppercased text and the
menu label.
2026-05-29 19:30:27 +02:00
OpenProject Actions CI 49b802ca02 Merge branch 'release/17.5' into dev 2026-05-28 08:51:09 +00:00
Kabiru Mwenja ab32cab495 Merge pull request #23337 from opf/bug/74762-numeric-id-in-the-email-notification-after-adding-watchers
bug/74762 Numeric ID in the email notification after adding watchers
2026-05-28 11:38:02 +03:00
OpenProject Actions CI eb6717f81e Merge branch 'release/17.5' into dev 2026-05-27 14:11:35 +00:00
Kabiru Mwenja 3036e852a9 Tighten render_mode and mail formatting helper docstrings
Strip a forward-looking aside about future external surfaces in RenderMode;
the invariant is that external surfaces need both absolute URLs and static
rendering. Replace "in practice" with "a coupled set" to drop the soft
hedge.

Drop the lead "wrappers around format_text" sentence on MailFormattingHelper
since the module body already shows the wrapping; the WHY (channel pinning,
extension/helper name parity) is the part worth documenting.
2026-05-27 13:22:56 +03:00
Kabiru Mwenja 499d7820a2 Add render_mode flag and MailFormattingHelper
`format_text` accepts `render_mode:` (`:in_app_html`, `:external_html`,
`:external_text`), which resolves the `only_path`, `static_html` and
`plain_text` context flags as a set. External surfaces (mailer HTML
body, future RSS/PDF/webhook) need absolute URLs and static rendering
together; pinning the trio at the public API keeps callers from
forgetting one. Explicit primitive kwargs still override.

`MailFormattingHelper` exposes `format_mail_html` and `format_mail_text`
thin wrappers around `format_text(render_mode:)`. The `_html` / `_text`
suffix matches the `.html.erb` / `.text.erb` template extension so
caller intent stays visible in the view, with no introspection of
`formats`.

The five WorkPackageMailer view sites use the helpers; `_work_package_details`,
`mentioned.html`, `mentioned.text`, `watcher_changed.html`, `watcher_changed.text`
drop the `static_html:`/`only_path:`/`plain_text:` boilerplate.
2026-05-27 13:04:26 +03:00
as-op a3225b7205 [#75380] Jira Migrator shows 0 issues info if server does not include the data in serverInfo endpoint
https://community.openproject.org/wp/75380
2026-05-27 11:46:47 +02:00
Alexander Brandon Coles 8fed4588f4 Merge pull request #21930 from opf/housekeeping/bump-jquery-4.0.0
[#71661, #69633] Bump jQuery to 4.0.0, remove jQuery global
2026-05-27 10:55:47 +02:00
Behrokh Satarnejad dbef4d9e71 [74931] Show type of field beside the attribute (#23205)
* Show filed type beside its name

* Add feature spec

* Add a comment for field_type_label

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Add custom field type label assertion to feature spec

* Move custom field to active group before asserting type label

* Rename the displayed field format value from field_type to
field_format_label and reuse CustomFieldsHelper for custom field format
labels.

* Make the table configuration modal wait more and embedded work package table loading take longer to avoid flaky failures when the modal or embedded table is still refreshing in CI

* Undo changes for switch_to method

* Undo changes for the tests that are sometimes failing on CI

* Update spec/features/types/form_configuration_spec.rb

Co-authored-by: Henriette Darge <h.darge@openproject.com>

* Update spec/helpers/types_helper_spec.rb

Co-authored-by: Henriette Darge <h.darge@openproject.com>

* Rubocop errors fixed

* Fix flaky field format labels spec by revisiting page after custom field creation

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Henriette Darge <h.darge@openproject.com>
2026-05-27 09:24:38 +02:00
Alexander Brandon Coles 855222a631 [#69633] Remove jQuery global
Remove jQuery from global window scope in main application to enable
incremental migration away from jQuery.

- Removed global jQuery init from `init-vendors.ts`
- Created local init-jquery modules for reporting that still require
  jQuery globals for legacy plugins
- Updated TypeScript shims to declare `window.jQuery` as optional

https://community.openproject.org/wp/69633
2026-05-26 12:03:19 +02:00
Kabiru Mwenja c9c9ea782c Drop mode-specific id from link_to_work_package doc examples
The hardcoded `#6` in the examples was misleading once the rendered
label became mode-dependent. Use `<id>` placeholder so the docstring
stays accurate across both modes without re-describing the modes.
2026-05-13 21:20:35 +03:00
Kabiru Mwenja 392ba04d1d Use formatted_id in journal cause formatter and link_to_work_package
The activity feed renders an automatic entry whenever a parent / child /
predecessor / related work package change cascades dates onto the
current WP. Both render paths spoke numeric ids:

- The plain-text branch (used for the API JSON) hardcoded `##{id}`.
- The HTML branch went through `link_to_work_package`, which built the
  visible link label as `Type ##{id}: subject`.

Both now use `formatted_id`, which produces `PROJ-7` in semantic mode
and `#42` in classic — same shape, mode-aware. The link href was
already mode-correct via `to_param`; only the visible label needed the
swap.
2026-05-13 17:41:48 +03:00
Behrokh Satarnejad d924c255cf [69524] Primerize Types form configuration page (#22854)
* Create the section component

* Create the form configuration component

* Create a controller

* change form template

* Use primer dialog for reset to defaults button

* show WP configuration modal while creating a related WPs table

* Fix the drag and drop functionality without save button

* Fix renaming functionality

* Use generic drag and drop in form configuration and move all client side action handling to server side

* Fix embedded query form configuration regressions

* Add data test selectors to all elements that we used for test

* update the current tests with the new implementations and design

* Add new tests for new controller of sections and rows

* WP quesry row should only have edit quesry action

* Update transformer spec regarding the new changes

* Fix the failing test in reset form configuration and some tests for actions

* Fix rubocop errors

* Fix eslint errors

* Add spec for removing a section

* Use condensed border boxes

* fix failing specs

* fix failing specs

* Switch the buttons in form configuration component

* Create the section at the top of the list

* Instead of using UUID, use the name of the group as the key

* Add missing check for EE for section actions

* Remove angular components

* Use action list instead of a border box for left side panel

* Reduce the margin between the right side panel and sub header, add some space to the query table left side, span to the whole available space

* Show validation errors while updating and creating a section

* Use a danger dialog for reset to default

* Add a confirmation for removing the section

* Align items in the row

* Use test_selector instead of data-test-selector

* Create move_action in rb file

* Create move_action in rb file

* Simplify section component

* Simplify form configuration component

* Remove dialog for rename and delete section on missing EE

* Create a component for inactive attribute list

* Create a separate component for reset dialog

* Remove EE feedback dialog

* Remove form partial which is not needed anymore

* Remove unused js strings

* Update using update_via_turbo

* Remove form configuration rows controller

* Create a blanksalte component

* Fix failing specs

* Fix failing specs

* Fix failing specs

* Remove unused translation strings

* Align form configuration section routes with actual create flow

* Change section to group

* Change section to group in services and controllers

* Change section to group in en.yml

* Fix rubocop errors

* Move the query group persistence assertion from the JS feature spec
to the synchronous form configuration groups controller spec.

* Reuse query service result in embedded query build

* Keep inactive attribute filter after turbo list refresh

* Extract form configuration group edit state into form model

* Fix the failing test

* Potential fix for pull request finding 'CodeQL / Potentially uninitialized local variable'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Rename inactive attribute component inputs

* Refine reset dialog wording for form configuration

* Use direct Turbo action for adding attribute groups

* Reuse generic filter-list controller for inactive attributes

* Remove focus impelementation in ts

* Group form configuration Stimulus controllers under one namespace

* Use turbo request service in form configuration controller

* Clarify legacy group key normalization in form config contract

* Replace inactive attribute list wrapper via turbo stream

* Extract duplicate untitled group key generation into Type::FormGroup.next_untitled_key

* Auto-generate untitled group name on create instead of returning an error

* Avoid mixed return types in form config group create service

* Extract shared form configuration group service behavior into concern

* Fix spacing for the last group and italic font for the placeholder rows

* Replace Angular no-results component with Primer Banner on form configuration page

* Hide dropped element immediately to prevent flickering before Turbo Stream response

* Reload type before rendering create error to prevent duplicate groups

* Await service initialization before use to prevent potential race condition

* Replace sleep calls with deterministic waits in form configuration spec

* Handle malformed JSON and invalid query errors gracefully in form configuration update

* Make query group label a clickable button and empty group hint italic

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-13 12:56:18 +02:00
Alexander Brandon Coles f8e3ea3019 Merge remote-tracking branch 'opf/dev' into HEAD
# Conflicts:
#	frontend/src/assets/sass/backlogs/_master_backlog.sass
#	modules/backlogs/config/locales/crowdin/es.yml
#	modules/backlogs/config/locales/crowdin/uk.yml
#	modules/storages/config/locales/crowdin/zh-CN.yml
#	modules/wikis/config/locales/crowdin/es.yml
#	modules/wikis/config/locales/crowdin/uk.yml
#	modules/wikis/config/locales/crowdin/zh-CN.yml
2026-05-11 17:31:22 +02:00
Oliver Günther eae05f9d1a Fix after login redirect not ending up on configured URL by default
We used request.url and a back_url for the home path to redirect users
if they did not end up trying to access on a deep link.

In case you access / and get redirected by require_login, you want users
to end up on the after_login_default_redirect_url

Likewise, if you access /login without a back_url, you want the same
behavior

Deep linking logins are unchanged

https://community.openproject.org/work_packages/74756
2026-05-08 09:26:58 +02:00
Alexander Brandon Coles 83573af155 Merge dev into release merge branch
Resolve Backlogs sprint conflicts by porting the release assignability
changes onto the renamed Sprint model.
2026-05-05 08:51:13 +01:00
Oliver Günther 428ac86c1a Fix relative url brekaing recognize_route
Use recognize_route helper that correctly applies relative_url_root.

The internal error was this:
No route matches "/foo/projects/oliver-meetings/work_packages"

and originating here:

```
  def back_url_is_wp_show?
    route = Rails.application.routes.recognize_path(params[:back_url] ||
request.env["HTTP_REFERER"])
    route[:controller] == "work_packages" && route[:action] == "index"
&& route[:state]&.match?(/^\d+/)
  end
```
2026-05-04 20:08:10 +02:00
Mir Bhatia df5eca254e Replace ActionMenu with multi select SelectPanel for role selector 2026-04-23 16:02:49 +02:00
Henriette Darge e688c198ba Merge pull request #22674 from opf/code-maintenance/73671-remove-ui-router-from-calendars
[73671][55638] Remove ui-router from Calendars and TeamPlanner
2026-04-23 08:36:51 +02:00
Mir Bhatia f9823ae0a0 Merge pull request #22441 from opf/feature/72383-workflows-ux-improvement-apply-workflow-setting-from-role-to-role
[72383] Workflow UX improvement: Apply workflow setting from one role to another role
2026-04-22 15:15:25 +02:00
Oliver Günther 02ae6a9119 Remove password min-rules in favor of clearly listed/checked password rules
https://community.openproject.org/work_packages/73461
2026-04-22 13:43:42 +02:00
David. 070c9d41f8 Merge branch 'dev' into feature/72383-workflows-ux-improvement-apply-workflow-setting-from-role-to-role 2026-04-21 13:51:06 +02:00
David F 733ba19893 Smoothen navigation in workflow administration. wp/72383 2026-04-21 13:49:11 +02:00
Henriette Darge 22a6d4e8b4 Create rails based split create 2026-04-21 09:15:05 +02:00
Klaus Zanders 8d15647333 Merge pull request #22372 from opf/departments-admin-menu
Manage organizations in Admin Menu
2026-04-20 12:39:43 +02:00
Klaus Zanders 3952f2b75c Correctly link to edit department when we are showing a department 2026-04-16 16:28:25 +02:00
Mir Bhatia 8d0dcd6056 Fix keep-scroll-position for reload banner 2026-04-15 16:16:51 +02:00
Klaus Zanders 51d60ce6cf For departments get rid of the old users interface 2026-04-14 09:58:11 +02:00
Klaus Zanders 0c49ec25ff Proper redirects to the departments page 2026-04-14 09:58:05 +02:00
Klaus Zanders 9a78015f46 Duplicate group views 2026-04-14 09:58:04 +02:00
David F 32831e08dc Merge remote-tracking branch 'origin/dev' into feature/72383-workflows-ux-improvement-apply-workflow-setting-from-role-to-role 2026-04-13 17:41:13 +02:00
David F fb564e24e6 Sideload workflow matrix to safely revert on ignored changes. wp/72383 2026-04-13 16:28:07 +02:00
Behrokh Satarnejad 3d69fbb2a2 [73434] Pagination component in mobile with one page looks weird (#22522)
* Hide pagination on mobile when only a single page is present

* simplify setting class
2026-04-09 10:47:21 +02:00
David F 6e2efe8eb1 Merge branch 'dev' into feature/72383-workflows-ux-improvement-apply-workflow-setting-from-role-to-role 2026-04-09 09:42:46 +02:00
David F e729229df1 Add refactored Unsaved dialog to workflow copy button. wp/72383 2026-04-07 15:52:55 +02:00
Henriette Darge 0c0a4cf4a4 Merge pull request #22517 from opf/bug/73401-hierarchy-wil-project-attributes-do-not-open-with-tree-expanded
[73401] Hierarchy/WIL project attributes do not open with tree expanded
2026-03-31 08:14:38 +02:00
Henriette Darge 0a104cb15b Expand the filterableTreeView in the inplaceEditFields per default 2026-03-30 14:16:06 +02:00
Wieland Lindenthal 200072ecc4 [#73511] Fix robots meta tag rendered as text instead of HTML element
`content_tag(:meta, name:, content:)` treated the keyword arguments as
text content rather than HTML attributes, producing visible JSON-like
output on the page. Replace with `tag(:meta, ...)` which correctly
renders a self-closing element with the proper attributes.

Adds a view spec assertion to cover the rendered output.
2026-03-30 07:43:15 +02:00
Behrokh Satarnejad 7014e13d3e Merge pull request #22475 from opf/71063-create-a-pagination-component-based-on-the-primer-specification
[71063] Update PVC with new Pagination component and Banner styles
2026-03-25 14:02:04 +01:00
Mir Bhatia e95ecee780 Merge branch 'dev' into epic/workflows-ux-quick-wins 2026-03-24 15:46:36 +01:00
Mir Bhatia 4558e8fda2 Show confirmation dialog when switching tabs 2026-03-23 15:56:08 +01:00
Oliver Günther 4d731dcab6 Replace raw and explicit html_safe calls 2026-03-20 09:49:10 +01:00
Oliver Günther 6dc1229300 Remove unused code 2026-03-20 08:53:14 +01:00
Mir Bhatia 0d2b6848f1 Merge branch 'epic/workflows-ux-quick-wins' into feature/72239-workflows-ux-improvement-select-relevant-statuses 2026-03-19 09:44:49 +01:00
David. 994e75c7f3 Merge pull request #22294 from opf/feature/72234-workflows-ux-improvement-show-workflows-by-type
Workflows UX improvement: Index page showing workflows by type
2026-03-19 08:52:13 +01:00
Oliver Günther c3b075d391 Merge remote-tracking branch 'origin/release/17.1' into release/17.2 2026-03-16 11:11:43 +01:00
Oliver Günther 30ef57877c Merge remote-tracking branch 'origin/release/17.0' into release/17.1 2026-03-16 11:10:12 +01:00
Oliver Günther 8d61c5fe7f Merge remote-tracking branch 'origin/release/16.6' into release/17.0 2026-03-16 11:08:23 +01:00
Mir Bhatia 7718a0c527 Merge branch 'feature/72234-workflows-ux-improvement-show-workflows-by-type' into feature/72239-workflows-ux-improvement-select-relevant-statuses 2026-03-13 15:02:08 +01:00