Issue #3613700: Record a work item's completer and completion time, rename its result field to outcome, and ship the personal task views

Storage: adds completer and completed to the work item, both stamped inside the existing lock by complete() and by completeForToken(), and renames result to outcome. The completer stays NULL whenever nobody identifiable acted (an external interaction resumed through a bearer link, an engine-driven timeout), so completion is read from the state and never from the completer being set. Indexed as (completer, completed) so a personal history serves its filter and its sort from one index.

OutcomeResult::OUTCOME_KEY replaces the literal naming the outcome inside a structured completion payload (nine call sites plus the act link query parameter). Its value stays result, so this MR changes no stored data; flipping it is the vocabulary follow-up.

Views: a current-user candidate filter mirroring WorkItemManager::accountVisibilityCondition() in SQL (a Views filter cannot consume an entity query, so a kernel test asserts both select the same items and the mirror cannot drift), a current-user completer filter for the history, and an act link field resolving the route each task type declares through TaskActRouteInterface. Both filters throw rather than no-op on a non-SQL backend: a visibility filter that silently dropped its restriction would widen a personal inbox to everyone's tasks.

A My tasks view ships with two page displays as sibling tabs, so both tabs share one row template and cannot drift; the style is an unformatted list of fields, so a theme overrides views-view-fields--my-tasks.html.twig once.

New orchestra_inbox_views bridge module owns everything needing both sides. Neither parent could: orchestra_views has Views but the views enforce orchestra_inbox, and orchestra_inbox has the work item but does not depend on Views, so either alone would ship a menu link to a route that was never registered. The existing tenant tasks view moves into it.

Also: the shipped dashboards had no entry point at all (local tasks under a path nothing owns, no default tab, no menu link), so a Views menu section now groups them, each link declared by the module that guarantees its route exists.

Docs and French translations updated, including one term fix across seven .po files: the task inbox was translated with the French for an email inbox.

Tests: 157/157 kernel classes pass. phpcs clean with warnings enabled; phpstan reports nothing new on the touched files.

Deployed and verified on an existing site, no update hook needed (pre-release). Install the outcome, completer and completed storage definitions, copy result into outcome before uninstalling result so recorded decisions survive the rename, enable orchestra_inbox_views, and re-import the tenant tasks view so its new enforced dependency takes effect (my_tasks arrives with the module install). The (completer, completed) index needs no manual DDL: it is applied by the same schema update that installs those two columns. Existing completed items keep an empty completer, which is correct rather than backfilled from the assignee, so they appear in no personal history.

Edited by Frank Mably

Merge request reports

Loading