6207 Commits

Author SHA1 Message Date
Klaus Zanders 24a5b24bcd Merge pull request #23661 from opf/wire-up-edit-work-package
[Resource Management] Allow editing Work on the WP from the Resource Planner
2026-06-11 16:19:17 +02:00
Klaus Zanders 3494a6df83 Merge pull request #23628 from opf/finish-work-package-table
[Resource Management] Finish work package table
2026-06-11 16:17:42 +02:00
Klaus Zanders 38ce5a3e33 Merge branch 'dev' into merge-release/17.5-20260611050510 2026-06-11 09:17:51 +02:00
Klaus Zanders c730866e12 Ensure that everything is nicely reloaded when creating/updating/deleting a resource allocation 2026-06-10 17:00:39 +02:00
Klaus Zanders 1d91460c84 Extract progress modal form glue into a shared ModalParams concern 2026-06-10 15:40:15 +02:00
OpenProject Actions CI ff8d35a227 Merge branch 'release/17.4' into release/17.5 2026-06-10 12:10:20 +00:00
Tobias Dillmann adb9f6b071 Authorize project custom field access in inplace edit dialog 2026-06-10 14:09:25 +02:00
Henriette Darge 5a3eaa11e3 Always expand the hierarchy in "favorite" mdoe 2026-06-10 09:23:12 +02:00
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
Kabiru Mwenja fd22629702 Code Maintenance/STC-462: Tidy the activity-tab paginator and centralise filter modes (#23552)
https://community.openproject.org/wp/STC-462

Two readability passes over the work package activity tab, no behaviour change. The paginator's private methods are reordered to follow their call order so the file reads top-down from `#call`, and the three activity filter modes (`:all`, `:only_comments`, `:only_changes`) — until now bare symbols duplicated across the controller, paginator, journal components and the hidden form — move into a single `WorkPackages::ActivitiesTab::Filters` module so the modes have one source of truth and can't drift apart. The diff reaches beyond the paginator into the controller, several components and a form, since that's where the symbols were scattered.
2026-06-05 16:50:08 +03:00
Kabiru Mwenja 5fdf57df69 Defer activity-tab sequence_version to anchor resolution
The work package activity tab computed a per-journal sequence_version on
every render — a ROW_NUMBER() window function over a LATERAL join — only to
stamp the legacy data-anchor-activity-id that #activity-N deep links rely on.
Nothing mints those links anymore; copy and share links use
#comment-<journal id>, which needs no extra query.

The activity number is now resolved on demand. Only a request carrying
?anchor=activity-N runs the window function, mapping the number to a journal
id the paginator exposes as resolved_anchor. The view hands that to the
client, which rewrites #activity-N to the canonical #comment-<id> and scrolls
using the comment anchor already present in the DOM. Default renders no longer
touch the window function.

References WP #68063.
2026-06-05 14:26:04 +03:00
OpenProject Actions CI 13c2ee75ba Merge branch 'release/17.5' into dev 2026-06-03 12:57:00 +00:00
Tom Hykel 2e01aff2a3 Merge pull request #23325 from opf/bug/74927-unable-to-change-a-parent-on-bulk-edit-of-work-packages-with-semantic-id
[#74927] Unable to change a parent on bulk edit of work packages with semantic ID
2026-06-03 13:39:06 +02:00
Tomas Hykel 27397984c2 add a comment 2026-06-03 12:43:46 +02:00
Kabiru Mwenja 63aedc3760 Merge pull request #23505 from opf/bug/stc-747-numeric-id-still-in-the-url-of-the-link-opened-from-the-email-notification
Bug/STC-747: Use semantic work package identifier in sharing email links
2026-06-03 11:05:53 +03:00
Oliver Günther 11dc79a74d Merge remote-tracking branch 'origin/release/17.5' into dev 2026-06-02 16:22:39 +02:00
Tomas Hykel 27f56b14bd fix: Render a proper error when releasing a 404d project identifier 2026-06-02 12:08:01 +02:00
Kabiru Mwenja 0d3c2850c9 Resolve notification email links to the semantic identifier too
The notification-row partial and the mention email's "see in center"
button built their /notifications/details/<id> links from the numeric
primary key, so mention, digest and reminder emails still linked to the
numeric URL on a semantic-identifier instance.

The split view already resolves the id through find_by_display_id, which
accepts both the numeric id and the semantic identifier, so handing it
the work package lets to_param render the display id. Also drops the
unused split_view_work_package_id helper, whose to_i wrongly suggested
the route only accepts a numeric id.
2026-06-02 10:18:30 +03:00
Oliver Günther 1f3da064ac Escape CSV formula cells by default 2026-06-01 13:44:29 +02:00
Jan Sandbrink 306173ad3f Merge pull request #23450 from opf/instance-id
Expose installation uuid via well-known endpoint
2026-05-29 14:39:16 +02:00
Behrokh Satarnejad 031c3ce1cc [73372] Wrong icon used when changing non working days (#23292)
* Create a new dialog component for non-working days

* Change the non-working days component

* Add feature spec

* Fix reload after canceling the action

* preserve submitted form data for confirmation, and simplify cancel handling

* Change header text

* Remove the typescript unnecessary codes and listening to a form submit and call update on confirm changes
2026-05-29 09:08:48 +02:00
Jan Sandbrink 2a0aac1fa9 Expose installation uuid via well-known endpoint
The main purpose is to make a deduplicating identifier available for
interaction with integrations. We want to start using it for the integration
with XWiki, but the underlying problem occurs regularly in integrations:

It's possible for an OP instance to integrate with more than one XWiki instance.
Vice versa it's also possible for one XWiki to integrate with multiple OPs.
When this happens, API calls like "show me wiki pages that point to work package 123"
become ambiguous, because WP 123 might exist on multiple OpenProject instances. Thus it
makes sense to have a global identifier for the OpenProject instance. Different identifiers
look good and unique at first, but they are not working well in detail:

* Base URL (e.g. https://openproject.example.com): Some instances are available via more than one URL,
  e.g. inside cluster vs. outside cluster.
* OAuth client ID: Usually not known to other party, and not guaranteed to be unique, because multiple
  authentication providers could be involved

Hence we decided to use a uniquely generated ID and expose it in a way that doesn't require additional configuration
by the users, but can be automatically discovered during integration setup.
2026-05-29 09:03:11 +02:00
Ivan Kuchin f6e073f0a1 [#74769] Remove portfolio_models feature flag
https://community.openproject.org/wp/74769
2026-05-28 13:53:08 +02:00
Tomas Hykel 948fa43321 chore: Remove feature flag for project-based work package identifiers 2026-05-25 17:45:06 +02:00
Tomas Hykel 3fbad33ee1 [#74927] Unable to change a parent on bulk edit of work packages with semantic ID
https://community.openproject.org/wp/74927
2026-05-22 19:10:26 +02:00
Tomas Hykel 46390ca62a feat: Release reserved project identifiers via admin 2026-05-20 20:48:00 +02:00
Tomas Hykel 1ce03faa03 feat: Improve progress reporting during identifier conversion 2026-05-20 20:27:43 +02:00
Kabiru Mwenja e2631598c2 Merge pull request #23204 from opf/feature/editor-mention-semantic-id
Render work-package mentions with the current display identifier
2026-05-20 17:26:50 +03:00
Kabiru Mwenja 70931762d9 Merge remote-tracking branch 'origin/dev' into feature/editor-mention-semantic-id
# Conflicts:
#	frontend/src/vendor/ckeditor/ckeditor.js
#	frontend/src/vendor/ckeditor/ckeditor.js.map
2026-05-20 16:33:47 +03:00
Andrej 57a525cb94 Merge branch 'dev' into bug/75031-imprecise-error-for-unallowed-ip-when-testing-jira-connection 2026-05-20 15:24:24 +02:00
Andrej 82e1f72d15 Merge branch 'dev' into bug/75031-imprecise-error-for-unallowed-ip-when-testing-jira-connection 2026-05-20 12:09:01 +02:00
as-op 8e8dd09c28 [#75032] Imprecise error for SSL errors when testing Jira connection
https://community.openproject.org/wp/75032
2026-05-20 11:09:36 +02:00
OpenProject Actions CI 7e1c003ba7 Merge branch 'release/17.4' into dev 2026-05-20 06:43:24 +00:00
OpenProject Actions CI 82c65d6a27 Merge branch 'release/17.3' into release/17.4 2026-05-20 06:42:24 +00:00
as-op 926b726ab1 [#75031] Imprecise error for unallowed IP when testing Jira connection
https://community.openproject.org/wp/75031
2026-05-19 16:20:42 +02:00
Oliver Günther 3fcdc893b4 Also use visible scope for activities view 2026-05-19 08:47:56 +02:00
Oliver Günther fea9ecf623 Use project specific checking for custom field visibility in journals 2026-05-19 08:41:14 +02:00
Dombi Attila 86d4831164 Update the respond_to_with_turbo_streams method to accept a service result too as a response. 2026-05-19 00:44:11 +03:00
Oliver Günther 27817f2871 Explicitly call journable.visible? on the diff controller 2026-05-18 11:28:51 +02:00
Kabiru Mwenja 27c6f72cbc Apply S5 review feedback: rename href_id, trim controller comment
- mention_filter.rb: rename local `href_id` to `display_id` to mirror the
  method name and the `data-display-id` wire attribute (the value is the
  user-facing identifier, used for both the href and the data-attribute).
- auto_completes_controller.rb: trim the `displayId` doc comment that
  incorrectly claimed the editor builds the mention's link URL from this
  field. The URL is composed server-side at render time from `data-id` /
  `data-display-id`; the editor only inserts the markdown source.
2026-05-15 10:59:11 +03:00
Kabiru Mwenja 5bf50f3243 Stringify displayId in auto_complete payload for APIv3 parity
The auto_complete endpoint exposed `displayId` as the bare
`work_package.display_id`, which is an Integer in classic mode and a
String in semantic mode. APIv3 already coerces this field on the work
package representer (and on its `:children` and `:ancestors` link
collections), so the auto_complete payload was the lone outlier.

The single CKEditor consumer interpolates the value into a string, so
this change is purely a consistency fix at the JSON boundary; nothing
behavioural depends on the wire type.
2026-05-15 10:59:09 +03:00
Kabiru Mwenja 4286c404aa Drop unused formattedId from auto_complete JSON response
The only consumer of `/work_packages/auto_complete.json` is the CKEditor
mention feed in commonmark-ckeditor-build, which reads `displayId`
(needed to build the markdown source `#PROJ-7` and the link URL) and
`to_s` (used as the dropdown label). `formattedId` was added alongside
`displayId` for symmetry but nothing reads it.
2026-05-15 10:59:08 +03:00
Kabiru Mwenja 745d4f9f5c Expose displayId and formattedId on work-package auto_complete API
The CKEditor mention plugin (in commonmark-ckeditor-build) reads
`displayId` from each search result so the markdown source it inserts
on autocomplete-pick speaks the user-facing identifier — `#PROJ-7` in
semantic mode, `#1234` in classic. The endpoint previously serialised
`work_package.attributes`, which gave the raw `identifier` column but
not the mode-aware `display_id` / `formatted_id` accessors.

Fold both into the JSON response. `displayId` collapses to the numeric
id in classic mode, so the frontend never needs a per-mode branch.
2026-05-15 10:59:08 +03:00
Oliver Günther e64a04898a Allow type and parent_id for wp login routes
https://community.openproject.org/work_packages/74778
2026-05-13 15:51:20 +02:00
Oliver Günther f4cc426b2c Merge pull request #23133 from opf/feat/users-filter-component
Convert custom filters on user administration to standard query
2026-05-13 14:34:04 +02:00
Oliver Günther 0dbb9f9e4b Allow configuring users table 2026-05-13 13:11:18 +02:00
Oliver Günther af53ecae32 Adapt specs 2026-05-13 13:11:17 +02: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 c950be910e Convert custom filters on user administration to standard query 2026-05-08 13:34:21 +02:00