8466 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
Henriette Darge 13fbeb1612 Merge pull request #23458 from opf/code-maintenance/75462-harmonize-colours-for-selection-state-between-backlogs-workpackages-and-notifications
[75462] Harmonize colours for selection state between Backlogs, WorkPackages & Notifications
2026-06-08 07:48:56 +02:00
ulferts 4f5a52edf9 Merge remote-tracking branch 'origin/dev' into merge-release/17.5-20260605114354 2026-06-05 13:44:46 +02:00
as-op 3ef51bd4c4 [JIM-111] Jira Migrator: Do not disable the button if the instance is not switched to semantic identifiers
https://community.openproject.org/wp/JIM-111
2026-06-04 16:29:27 +02:00
OpenProject Actions CI 13c2ee75ba Merge branch 'release/17.5' into dev 2026-06-03 12:57:00 +00: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
Alexander Brandon Coles fa5b7ee1b5 Merge remote-tracking branch 'opf/dev' into merge-release/17.5-20260603051246 2026-06-03 09:52:08 +02:00
Henriette Darge 549bf69156 Introduce specific variables for list item selection, hover and pressed state 2026-06-03 09:40:42 +02:00
Tom Hykel afe7550851 Merge pull request #23366 from opf/fix/74928-numeric-id-instead-of-semantic-one-on-th
fix(ui): Numeric ID instead of semantic one on the error message on bulk edit (WP #74928)
2026-06-02 17:24:18 +02:00
Tomas Hykel 0df08645b1 review feedback 2026-06-02 16:45:07 +02:00
Oliver Günther 11dc79a74d Merge remote-tracking branch 'origin/release/17.5' into dev 2026-06-02 16:22:39 +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
Kabiru Mwenja b2d93c3a00 Use semantic work package identifier in sharing email links
The shared-work-package email built its "Open work package" link and its
text-part heading from the numeric primary key, so recipients on a
semantic-identifier instance still landed on /work_packages/<numeric-id>
rather than the semantic URL.

Pass the work package itself to the URL helper so to_param yields the
display id, and render the text heading with formatted_id to match the
other work package mailers. Also drops an unused @notification_url that
carried the same numeric-id problem.

STC-747
2026-06-02 09:55:45 +03:00
Behrokh Satarnejad 9f0cb66e43 Move EE banners into active configuration pane 2026-06-01 16:13:17 +02:00
Oliver Günther 1f3da064ac Escape CSV formula cells by default 2026-06-01 13:44:29 +02:00
Alexander Brandon Coles ba80c908ca Merge pull request #21480 from opf/dependabot/bundler/dev/capybara_accessible_selectors-v0.16.0
Bump capybara_accessible_selectors from v0.15.0 to v0.16.0
2026-06-01 12:31:49 +02:00
OpenProject Actions CI b2f72fd486 Merge branch 'release/17.5' into dev 2026-05-30 04:49:04 +00: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
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
Henriette Darge c6e407bee7 Open dropdowns to the top to unnecessary white space to the bottom. The advanced radio buttons above ensure that there is enough space 2026-05-28 14:35:58 +02:00
OpenProject Actions CI 3e02e2863f Merge branch 'release/17.5' into dev 2026-05-28 12:18:34 +00:00
Tom Hykel 6496b758bc Merge pull request #23369 from opf/fix/74926-numeric-id-instead-of-semantic-one-in-bu
fix(ui): Numeric ID instead of semantic one in bulk edit work packages (WP #74926)
2026-05-28 14:00:55 +02:00
Pavel Balashou 7f1db9dc50 [#75422] Wrong wording on import page in admin
https://community.openproject.org/wp/75422
2026-05-28 12:19:28 +02:00
Kabiru Mwenja f12fc7551f Migrate remaining mailers to format_mail_html / format_mail_text (#23387)
The view-helper migration introduced by the parent PR now covers the
remaining mailer surfaces: UserMailer (`message_posted`, `news_added`,
`news_comment_added`), ProjectMailer (`project_created`),
ProjectArtifactsMailer (`creation_wizard_submitted`), MemberMailer
(`added_project`, `updated_project`, `updated_global`), AnnouncementMailer
(`announce`), DocumentsMailer (`document_added`), and the shared mailer
layout (`localized_emails_header`, `localized_emails_footer`).

Sites drop the `static_html: true` / `only_path: false` / `plain_text: true`
boilerplate; `render_mode:` pinning lives in the helper.

The layout previously called `OpenProject::TextFormatting::Renderer.format_text`
directly, bypassing the helper layer. The empty visibility cache (no
current_user-scoped preload at layout time) is handled by the existing
fallback in `LinkHandlers::WorkPackages#text_only?` — covered by a new
sanity spec in `user_mailer_spec.rb` that exercises the header path with
a WP reference and asserts plain-text formatted_id rendering.

Per-bucket regression coverage added: absolute-URL and formatted_id
assertions across both classic and semantic identifier modes, mirroring
the WorkPackageMailer spec pattern.
2026-05-28 12:48:43 +03: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
as-op 9ebfe63474 [#72840] Jira Migrator: misalignement between the status badge and the import name
https://community.openproject.org/wp/72840
2026-05-27 14:18:40 +02: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
Andrej 0a684d4796 Merge pull request #23380 from opf/bug/75382-no-way-to-find-jira-import-run-history-page
[#75382] No way to find jira import run history page
2026-05-27 11:25:59 +02:00
Pavel Balashou 2b4e3fb4af [#75382] No way to find jira import run history page
https://community.openproject.org/wp/75382

- Adds jira import run history link to jira import run page header.
2026-05-27 11:03:21 +02:00
Tom Hykel 1a1da55c67 Potential fix for pull request finding 'CodeQL / Database query in a loop'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-26 23:53:29 +02:00
Tomas Hykel 2ad4ea078a fix(ui): Numeric ID instead of semantic one on the error message on bulk edit (WP #74928) 2026-05-26 23:47:59 +02:00
Tomas Hykel 529bd77587 fix(ui): Numeric ID instead of semantic one in bulk edit work packages (WP #74926) 2026-05-26 23:31:44 +02:00
Kabiru Mwenja f5957d800f Collapse plain-text formatter into a context option
Same pattern as the static-HTML collapse: the `markdown_as_text` format
symbol was a thin subclass setting a context flag and swapping the filter
list. Replace it with `plain_text: true` on the existing rich formatter,
which now picks between `RICH_FILTERS` and `TEXT_FILTERS` constants based
on the flag. `static_html:` and `plain_text:` now sit as peer options on
one format.

Rename the `as_text` context key to `plain_text` for symmetry with
`static_html`. Update both mailer `.text.erb` views and the two handler
predicates that branch on the flag.
2026-05-26 22:10:29 +03:00
OpenProject Actions CI a147cf2168 Merge branch 'release/17.5' into dev 2026-05-26 13:14:53 +00:00
Alexander Brandon Coles 3028b248d0 Merge pull request #23320 from opf/bug/75275-truncated-text-hellip-misalignment
[#75275] Fix hellip/expandable text alignment
2026-05-26 14:28:36 +02:00
Kabiru Mwenja 776536d88b Drop redundant explicit format: :rich
`:rich` is the default at every layer of the `format_text` chain
(view helper → `OpenProject::TextFormatting#format_text` →
`Renderer.format_text`), so the explicit keyword adds noise.
2026-05-26 14:56:03 +03:00
Kabiru Mwenja 94c13c11fa Collapse static-HTML formatter into a context option
The static-HTML pipeline differs from the rich pipeline only by a
context flag - both share the same filter chain. The dedicated
`Markdown::StaticHtmlFormatter` and `:markdown_as_static_html`
format symbol were pure boilerplate around that one-line override.

Callers now pass `format: :rich, static_html: true` and the matchers
read `context[:static_html]` directly.
2026-05-26 14:50:59 +03:00
Kabiru Mwenja ee4c9aee59 Render WP quickinfo macros as static HTML in mailer notes
The `##N` and `###N` work-package macros emit JS-hydrated
`<opce-macro-wp-quickinfo>` custom elements, which mail clients
collapse to empty bullets. Introduce a `:markdown_as_static_html`
format that shares the rich filter chain but signals
`context[:as_static_html]` so the matcher and `MentionFilter` emit a
server-rendered anchor — formatted_id, type name, subject, and (for
`###`) status name — closely mirroring the in-app widget once
flattened.

Mailer HTML templates (`mentioned`, `watcher_changed`,
`_work_package_details`) opt into the new format. Invisible WPs still
render as plain-text labels, matching the cross-project visibility
policy.

`ResourceLinksMatcher.build_cache` and
`MentionFilter#preload_work_package_mentions` eager-load `:type` and
`:status` only when `:as_static_html` is set, leaving the default web
path's two-SELECT shape untouched. Classic-mode preload now also runs
under `:as_static_html` so the link handler can resolve type/subject
for `##`/`###`.

Renames the internal flag `context[:plain_text]` to `context[:as_text]`
to restore symmetry with the user-facing `:markdown_as_text` format.
2026-05-26 14:19:23 +03:00
Kabiru Mwenja a54dd3dc0b Rename :plain_text format to :markdown_as_text
The format runs the full markdown pipeline and then collapses the DOM
to text — it has nothing to do with the existing `:plain` format,
which strips markdown entirely. Moves the formatter under the Markdown
namespace next to the rich-output formatter whose pipeline it mirrors,
and renames the symbol so the relationship is legible from the
formatter_for case clause.
2026-05-26 14:19:11 +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
Henriette Darge 3d35922f46 Add ckEditor font color override to support dark mode again 2026-05-26 11:10:30 +02:00
David F 1d1a31f86a Clean up eventually useless code for advanced filters. wp/74380 2026-05-26 08:14:56 +02:00
Alexander Brandon Coles 878ff28148 [#75275] Fix hellip/expandable text alignment
Extracts a shared `ExpandableTextComponent` for truncation with
`HiddenTextExpander`, preserving caller classes and data attributes.
Implements it on on the permissions report and workflows matrices so
expanded labels keep the ellipsis aligned with the first line.

https://community.openproject.org/wp/75275
2026-05-22 15:16:52 +02:00
Alexander Brandon Coles b03b1274e6 Merge pull request #23282 from opf/implementation/74969-remove-backlogs_versions_default_fold_state-preference
[#74969] Remove backlogs_versions_default_fold_state preference
2026-05-21 12:17:01 +02:00
Tomas Hykel 46390ca62a feat: Release reserved project identifiers via admin 2026-05-20 20:48:00 +02:00
Dombi Attila 6400e48dcb [#74969] Remove backlogs_versions_default_fold_state preference
https://community.openproject.org/wp/74969
2026-05-20 17:22:56 +03:00
Pavel Balashou db189f0aaf [#72427] Jira Migrator imports project-based semantic work item identifiers
https://community.openproject.org/wp/72427
2026-05-20 13:44:28 +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