3683 Commits

Author SHA1 Message Date
Tom Hykel a83c91d336 Merge pull request #23696 from opf/feature/stc-729-adapt-excel-and-csv-exports-for-semantic-identifiers
[STC-729] Support semantic identifiers in Excel and CSV exports
2026-06-12 12:45:29 +02:00
OpenProject Actions CI bee1f92245 Merge branch 'release/17.5' into dev 2026-06-12 05:08:37 +00:00
Tomas Hykel a30f5d5169 [STC-729] Adapt Excel and CSV exports for semantic identifiers
https://community.openproject.org/wp/STC-729
2026-06-11 20:58:47 +02:00
Pavel Balashou 36c0c8ae5e [JIM-112] Capital letters in user email or login break import with error.
https://community.openproject.org/wp/JIM-112
2026-06-11 11:34:54 +02:00
Tobias Dillmann f3a69c179c [#73887] Repair WP PDF export spec by introducing buckets 2026-06-10 19:47:12 +02:00
Klaus Zanders 34c262c489 Add more scopes for working time related models 2026-06-10 11:57:00 +02:00
Alexander Brandon Coles a7e0dc3f75 Merge remote-tracking branch 'opf/dev' into HEAD
# Conflicts:
#	modules/backlogs/config/locales/crowdin/cs.yml
#	modules/backlogs/config/locales/crowdin/es.yml
#	modules/backlogs/config/locales/crowdin/it.yml
#	modules/backlogs/config/locales/crowdin/ko.yml
#	modules/backlogs/config/locales/crowdin/pl.yml
#	modules/backlogs/config/locales/crowdin/pt-BR.yml
#	modules/backlogs/config/locales/crowdin/ro.yml
#	modules/backlogs/config/locales/crowdin/zh-CN.yml
#	modules/backlogs/spec/features/inbox_column_spec.rb
#	modules/backlogs/spec/support/pages/backlog.rb
#	modules/resource_management/config/locales/crowdin/es.yml
#	modules/resource_management/config/locales/crowdin/it.yml
#	modules/resource_management/config/locales/crowdin/ko.yml
#	modules/resource_management/config/locales/crowdin/pl.yml
#	modules/resource_management/config/locales/crowdin/zh-CN.yml
#	modules/wikis/config/locales/crowdin/es.yml
#	modules/wikis/config/locales/crowdin/it.yml
#	modules/wikis/config/locales/crowdin/ko.yml
#	modules/wikis/config/locales/crowdin/pl.yml
#	modules/wikis/config/locales/crowdin/pt-BR.yml
#	modules/wikis/config/locales/crowdin/zh-CN.yml
2026-06-04 09:44:51 +02:00
Kabiru Mwenja a7db7834db Merge pull request #23541 from opf/bug/stc-524-shared-work-package-not-showing-images-of-comments
Allow viewing Activity attachments in shared WPs
2026-06-03 19:09:20 +03:00
Kabiru Mwenja b7380349c0 Test that sharing a WP does not expose internal-comment attachments
A shared non-member can see the work package but lacks view_internal_comments,
so internal journals must stay hidden. Pins the internal-branch guard.
2026-06-03 18:34:49 +03:00
Tomas Hykel a4ae9a44c9 Allow viewing Activity attachments in shared WPs 2026-06-03 16:08:36 +02:00
Kabiru Mwenja f50b2f9794 Resolve semantic work package identifiers in attribute macros
The resolver only treated purely numeric references as work package ids,
so semantic identifiers fell through to a typeahead search and failed.
Route both numeric and semantic ids to the show endpoint instead.
2026-06-03 16:16:48 +03:00
Klaus Zanders 9a875fde7a Merge pull request #23349 from opf/work-package-list-view
[Resource Management] Work Package List View
2026-06-02 16:49:02 +02:00
Oliver Günther 11dc79a74d Merge remote-tracking branch 'origin/release/17.5' into dev 2026-06-02 16:22:39 +02:00
Oliver Günther 9a91aed979 Merge remote-tracking branch 'origin/release/17.4' into release/17.5 2026-06-02 08:54:49 +02:00
Oliver Günther b9d0405c4e Merge remote-tracking branch 'origin/release/17.3' into release/17.4 2026-06-02 08:54:40 +02:00
Oliver Günther a52d0de5d6 Improve parsing of timestamp values 2026-06-02 08:25:44 +02:00
OpenProject Actions CI 523ef39065 Merge branch 'release/17.5' into dev 2026-06-01 14:42:29 +00:00
Oliver Günther 1f3da064ac Escape CSV formula cells by default 2026-06-01 13:44:29 +02:00
Klaus Zanders bfd5c6c6e5 fix spec after renaming class 2026-06-01 11:36:11 +02:00
Klaus Zanders e53b50fa94 Merge branch 'dev' into filter-form-with-wp-query 2026-05-30 17:08:42 +02:00
OpenProject Actions CI b2f72fd486 Merge branch 'release/17.5' into dev 2026-05-30 04:49:04 +00:00
Kabiru Mwenja 14ef6f901d Use semantic identifier for server-rendered search result links
Work package results on the search page build their link through the
acts_as_event url proc, which passed the numeric primary key instead of
the work package's display id. In semantic mode this rendered
/work_packages/<id> even though the row showed the semantic identifier,
unlike Rails URL helpers that already resolve the object via to_param.
Pass display_id so the link follows the same convention everywhere.
2026-05-29 19:12:27 +03:00
Klaus Zanders 5db7e6afaf Add specs 2026-05-29 13:56:36 +02:00
Tom Hykel 91c3d143dc fix(ui): Numeric ID instead of semantic one on the Activity page (WP #74912) (#23345)
---------

Co-authored-by: Kabiru Mwenja <k.mwenja@openproject.com>
2026-05-29 14:45:43 +03:00
Klaus Zanders 7af6f5d6cf Merge pull request #23441 from opf/filter-form-component
Filter form component
2026-05-29 11:18:27 +02:00
Oliver Günther 5330745e69 Add the content type for external URLs 2026-05-29 10:26:43 +02:00
Oliver Günther 6f63faeed1 Extract and use charset to properly encode attachments 2026-05-29 10:26:43 +02:00
Klaus Zanders 2a7e93d978 Add compatability for Work Package Queries 2026-05-29 09:28:03 +02:00
Kabiru Mwenja 58a5e19669 bug/74156 Sort WP lists by project identifier, not project_id, in semantic mode (#23400)
Sort WP lists by project identifier, not project_id, in semantic mode

The semantic-mode "ID" sort grouped projects by project_id (insertion
order) before the per-project sequence. Projects added after others
landed below them in the list even when their identifier sorted
alphabetically earlier. Sort by projects.identifier instead so the order
matches the visible "<project identifier>-<sequence>" column.

The projects table is already joined for every work-package list query,
so the new sort term costs no extra round-trip.
2026-05-28 12:05:24 +03: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
Andrej fca9d9cf3f Merge pull request #23379 from opf/bug/75381-jira-migrator-give-not-helpful-error-message-if-user-email-is-blank
[#75381] Jira Migrator give not helpful error message if user email is blank
2026-05-27 11:55:22 +02:00
Pavel Balashou 365db7e703 [#75381] Jira Migrator give not helpful error message if user email is blank
https://community.openproject.org/wp/75381

- Add user/group information to the error message in case of creation failure.
2026-05-27 10:55:22 +02:00
Kabiru Mwenja c607b36b8e Rename with_hash_prefix to format_display_id 2026-05-26 22:10:07 +03:00
Kabiru Mwenja 7c9d15e506 Render WP identifiers per current mode in plain-text mailer notes
The `mentioned` and `watcher_changed` text-mailer bodies surfaced raw
journal markdown — numeric `#42` references stayed numeric in semantic
mode, and `<mention>` envelopes leaked as HTML source.

Introduces `:plain_text` as a sibling format inside the existing Plain
module. The filter chain mirrors the markdown pipeline (markdown,
sanitization, mention, pattern-matcher) and finishes with a new
`PlainTextOutputFilter` that collapses the DOM to text. The
`WorkPackages` link handler and `MentionFilter` get plain-text branches
keyed off `context[:plain_text]` so identifier resolution stays in one
place across rich and plain channels.

Closes https://community.openproject.org/wp/74762
2026-05-26 14:18:17 +03:00
Andrej 7e53ebf981 Merge branch 'release/17.5' into bug/75238-jira-migrator-cannot-import-a-user-with-non-alphanumeric-characters-in-their-name 2026-05-26 09:08:25 +02:00
Tomas Hykel 948fa43321 chore: Remove feature flag for project-based work package identifiers 2026-05-25 17:45:06 +02:00
Kabiru Mwenja 6de4e2a76b bug/74156 Lists of work packages should sort correctly in semantic mode (#23299)
Sort work packages by sequence_number in semantic mode

In semantic mode the visible "ID" is `<project_identifier>-<sequence_number>`,
but the list sort key was the database primary key. A work package moved
between projects keeps its primary key and receives a new sequence number
in the target project, so it could appear above natively-created rows with
higher sequence numbers — e.g. `LARGE-3` above `LARGE-1` and `LARGE-2`.

The "ID" sortable on the work-package query select now resolves at request
time. In semantic mode it returns `(work_packages.project_id, work_packages
.sequence_number)`, backed by the existing partial unique index. In classic
mode it stays `work_packages.id`. The Proc resolution lives in
`WorkPackageSelect#sortable` so every consumer (`Query::SortCriteria`,
group-by composition, the HAL/API sortBy resource) sees the resolved value.
2026-05-21 20:00:09 +03:00
as-op 43291c56ea [#75238] Jira Migrator cannot import a user with non-alphanumeric characters in their name
https://community.openproject.org/wp/75238
2026-05-21 16:36:37 +02:00
Kabiru Mwenja e597aa4216 Fix NameError: uninitialized constant Projects::Identifier::CLASSIC_IDENTIFIER_FORMAT (#23293) 2026-05-20 22:02:41 +03:00
Kabiru Mwenja b87afc480a Merge pull request #23138 from opf/implementation/74766-adapt-pdf-text-macro-link-handler-for-semantic-work-package-identifiers
Resolve semantic identifiers in PDF text macro links
2026-05-20 19:11:31 +03:00
Kabiru Mwenja 24c869b5c4 Apply review feedback to PDF semantic macro handler
Scope semantic-id resolution through `WorkPackage.visible` so a reference to a
work package outside the current user's visibility falls through to literal
text. Without this, semantic identifiers (guessable, project-prefixed) would
disclose existence: a hidden `#PROJ-1` would resolve and render a mention,
whereas a non-existent `#GHOST-1` would fall through — a discoverable oracle.
Spec pins the new contract; matches the in-app preload pipeline which already
uses `WorkPackage.visible`.

Drop the `to_i.to_s` round-trip on the numeric branch. `numeric_id?` already
verifies the matched string is canonical, so the round-trip is a no-op.

Tighten the alias spec to assert the rendered `data-text` carries the current
identifier, not just that the old one is absent. Trim the `render_link`
comment to the load-bearing claim (defence-in-depth escape).
2026-05-20 17:32:17 +03:00
Jens Ulferts 0ceaa2617c Merge pull request #23181 from opf/code-maintenance/74768-remove-calculated_value_project_attribute-feature-flag
[#74768] Remove calculated_value_project_attribute feature flag
2026-05-20 16:09:46 +02:00
Kabiru Mwenja 796f6b1ccd Resolve semantic identifiers in PDF text macro links
In semantic mode, the PDF text-macro handler resolves `#PROJ-1`,
`##PROJ-1`, and `###PROJ-1` through `find_by_display_id` and emits a
`<mention>` whose `data-id` carries the display id straight through to
the PDF renderer. Cache misses (unknown identifier, deleted WP) fall
through to literal text. Historical aliases resolve to the current
identifier. Classic mode rejects semantic-shape input — `#PROJ-1` in
a classic-mode export stays literal.

Numeric input keeps its current path: the matcher emits the mention
from the matched id without a DB lookup.

`render_link` HTML-escapes both interpolated values. The matcher
regex (`ID_ROUTE_CONSTRAINT`) already constrains shape to
`\d+|[A-Z][A-Z0-9_]*-\d+`, so the escape is defence-in-depth: a
future caller bypassing the matcher cannot regress into HTML
attribute injection.

The fast-path filter `Links.applicable?` matches `/#[A-Z\d]/` so
semantic-only bodies reach the full regex.

Downstream `Exports::PDF::Common::Markdown#wp_mention_macro` is
updated to `find_by_display_id` in PR 23093. This commit must land
after that PR — otherwise its existing `id[/\d+/]; find_by(id:)`
extracts the trailing digits from `data-id="PROJ-7"` and resolves
to WP id 7.
2026-05-20 16:35:04 +03:00
Dombi Attila 8a8e47550d Merge branch 'dev' into feature/71305-exclude-certain-work-package-types-from-automated-backlog-per-project 2026-05-20 12:47:25 +03:00
Oliver Günther 3b3791f9ec Use correct configuration for group filter on user administration
https://community.openproject.org/work_packages/74763
2026-05-20 09:18:57 +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
Ivan Kuchin b648341030 [#74768] Remove calculated_value_project_attribute feature flag
https://community.openproject.org/wp/74768
2026-05-19 17:42:42 +02:00
Tobias Dillmann 0537f52f4b [#71305] Introduce MODULE_ENABLED event and use it for backlogs 2026-05-19 14:21:54 +02:00
Kabiru Mwenja 1ce4251c23 Merge pull request #23203 from opf/feature/text-macro-semantic-id-rendering
Accept semantic work-package identifiers in text macros
2026-05-19 14:42:30 +03:00