{"id":51462492,"url":"https://github.com/dirnbauer/typo3-workspace-overlay-patch","last_synced_at":"2026-07-06T07:00:51.524Z","repository":{"id":360212556,"uuid":"1249115255","full_name":"dirnbauer/typo3-workspace-overlay-patch","owner":"dirnbauer","description":"Composer patch bundle for TYPO3 v14.3+ workspace query overlays. Single TSconfig toggle.","archived":false,"fork":false,"pushed_at":"2026-05-25T12:48:19.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T14:28:40.483Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dirnbauer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T11:15:57.000Z","updated_at":"2026-05-25T12:48:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dirnbauer/typo3-workspace-overlay-patch","commit_stats":null,"previous_names":["dirnbauer/typo3-workspace-overlay-patch"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dirnbauer/typo3-workspace-overlay-patch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-workspace-overlay-patch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-workspace-overlay-patch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-workspace-overlay-patch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-workspace-overlay-patch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dirnbauer","download_url":"https://codeload.github.com/dirnbauer/typo3-workspace-overlay-patch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-workspace-overlay-patch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35180933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-06T07:00:50.619Z","updated_at":"2026-07-06T07:00:51.514Z","avatar_url":"https://github.com/dirnbauer.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# TYPO3 Workspace Overlay Patch\n\nComposer patch bundle for TYPO3 v14.3 LTS. Fixes two related backend regressions when the user works in a workspace:\n\n1. Field-filtered queries (record-list search, live search, suggest wizard, slug uniqueness) silently miss values that exist only in a workspace draft — the default `WorkspaceRestriction` excludes regular workspace versions, so overlay never sees them.\n2. Workspace rows that reach `BackendUtility::workspaceOL()` / `PageRepository::versionOL()` directly are not normalized, so consumers expecting the live uid get the offline uid instead.\n\nThe fix adds a new `QueryBuilder::addWorkspaceRestriction()` helper, a central decision helper `WorkspaceRestriction::shouldIncludeAllVersionedRecordsForBackendQuery()`, and two normalization blocks in the overlay functions. Everything is gated by **one TSconfig key** so the patch behaves as a clean on/off switch.\n\n## Install\n\n```sh\ncomposer require webconsulting/typo3-workspace-overlay-patch\n```\n\nThis package only carries patches — no PHP runtime code. The patches are applied by [`cweagans/composer-patches`](https://github.com/cweagans/composer-patches) v2 against `typo3/cms-core` and `typo3/cms-backend`.\n\nYour root `composer.json` must allow the plugin:\n\n```json\n{\n  \"config\": {\n    \"allow-plugins\": {\n      \"cweagans/composer-patches\": true\n    }\n  }\n}\n```\n\n## The Switch\n\nDefault behavior: **on** for any backend user in a non-live workspace. To disable, set User or Page TSconfig:\n\n```\noptions.workspaces.includeAllVersionedRecordsInQueries = 0\n```\n\nWhen the switch is off, the patch is fully dormant: search uses the vanilla `WorkspaceRestriction` and the overlay normalizers fall through to the original core logic.\n\n## What Gets Patched\n\n| Half | File | What it does |\n| --- | --- | --- |\n| Query | `typo3/cms-backend/Classes/RecordList/DatabaseRecordList.php` | Include all workspace rows in record-list search, distinct count by live uid, dedupe after overlay |\n| Query | `typo3/cms-backend/Classes/Search/LiveSearch/DatabaseRecordProvider.php` | Same broadening for live-search records |\n| Query | `typo3/cms-backend/Classes/Search/LiveSearch/PageRecordProvider.php` | Same broadening for live-search pages |\n| Query | `typo3/cms-backend/Classes/Form/Wizard/SuggestWizardDefaultReceiver.php` | Suggest wizard queries see workspace-only labels |\n| Query | `typo3/cms-core/Classes/DataHandling/SlugHelper.php` | Slug uniqueness sees workspace-only slug values |\n| Overlay | `typo3/cms-backend/Classes/Utility/BackendUtility.php` | `workspaceOL()` normalizes direct workspace rows to live uid, drops delete placeholders |\n| Overlay | `typo3/cms-core/Classes/Domain/Repository/PageRepository.php` | `versionOL()` same normalization in frontend / domain repository |\n| API | `typo3/cms-core/Classes/Database/Query/QueryBuilder.php` | New `addWorkspaceRestriction()` developer helper |\n| API | `typo3/cms-core/Classes/Database/Query/Restriction/WorkspaceRestriction.php` | New `shouldIncludeAllVersionedRecordsForBackendQuery()` central decision helper |\n\n## Compatibility\n\n- TYPO3 14.3 LTS (currently pinned to 14.3.1; rebuild against newer patch releases as needed).\n- PHP 8.2+.\n- `EXT:workspaces` must be installed for the patch to do anything (the gate returns `false` otherwise).\n\n## Documentation\n\n- [`docs/typo3-workspace-query-overlay-explained.html`](docs/typo3-workspace-query-overlay-explained.html) — full long-form explanation with file-by-file walkthrough, test results, and the gate diagram.\n- [`docs/typo3-workspace-query-overlay.md`](docs/typo3-workspace-query-overlay.md) — original analysis report (problem scan, ten risk areas, generic solution).\n\n## License\n\nGPL-2.0-or-later, matching TYPO3 core.\n\n## Status\n\nVerified against TYPO3 14.3.1 with PHP 8.3.30, MariaDB 10.11. Five upstream functional tests pass (see the HTML doc for the reproduction recipe). Not yet submitted upstream as a Forge / Gerrit change.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-workspace-overlay-patch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdirnbauer%2Ftypo3-workspace-overlay-patch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-workspace-overlay-patch/lists"}