Skip to content

[Docs] Update and refine docs#1122

Open
fashxp wants to merge 15 commits into
2026.2from
docs/restructure-datahub
Open

[Docs] Update and refine docs#1122
fashxp wants to merge 15 commits into
2026.2from
docs/restructure-datahub

Conversation

@fashxp

@fashxp fashxp commented Jul 14, 2026

Copy link
Copy Markdown
Member

No description provided.

fashxp and others added 5 commits July 10, 2026 09:56
Replace doc/04_Studio.md, a 298-line hand-maintained mirror of the Studio
REST API, with doc/04_Studio_Integration.md. All Studio controllers are
@internal and Studio serves generated OpenAPI docs at
/pimcore-studio/api/docs, so the copy could only drift. It already had:
it named the PHP constant PLUGIN_DATA_HUB_CONFIG as the permission
(the value is plugin_datahub_config) and gave the prefix as
/pimcore-studio/api/data-hub instead of
/pimcore-studio/api/bundle/data-hub. The replacement keeps the permission
model, the location of the generated API docs, and points at the public
GraphQL endpoint /pimcore-graphql-webservices/{clientname}.

Correct further content that no longer matched the source:

- Deployment named the config directory var/config/data-hub. Migration
  Version20230329133119 renames it to var/config/data_hub, which is also
  the default in Configuration.php.
- Deployment called datahub:graphql:rebuild-definitions "deprecated".
  The command was removed in 2.0.0; datahub:configuration:rebuild-workspaces
  replaces it. The upgrade notes named the replacement
  datahub:graphql:rebuild-workspaces, which never existed.
- The upgrade notes gave the Studio endpoints as /studio/api/datahub/...
- Basic Principle described the removed Admin Classic interface. The
  configuration panel now lives in Pimcore Studio under
  Automation & Integration > Data Hub Configuration.
- Query samples linked to dead /admin/login/deeplink demo URLs.

Document the permission resolution order from Configuration::isAllowed():
admin or plugin_datahub_admin always wins, otherwise a configuration's own
permissions decide alone, otherwise the adapter permission decides.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LmFQ3VND6uUqMpWsmppz6
configuration3.png showed the removed ExtJS Settings menu with a
"Datahub Config" entry, contradicting the documented navigation path.
Replace it with the Studio mega menu showing
Automation & Integration > Data Hub Configuration.

Replace add_config.png with the Studio adapter menu, which lists
GraphQL, File Export, Productsup, Webhooks, Data Objects Importer,
Simple REST and Headless Documents.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LmFQ3VND6uUqMpWsmppz6
Recapture the core GraphQL configuration screens from Pimcore Studio on
the public demo: the General, Schema Definition and Security Definition
tabs, the field configuration dialog's operator overview, and the
GraphQL Playground running a live query against the products endpoint.
The previous images showed the removed ExtJS Admin Classic interface.
The API key visible on the Security tab is masked.

Replaced: general, schema, schema_add, security1, iexplorer,
open_explorer and queryoperators_overview.

Correct the config docs against the current UI:

- The General tab no longer has an SQL Condition field. It was removed
  in Datahub 2.0.0, as the upgrade notes record. The General Settings
  page now lists Active, Type, Name, Description and Group.
- The Security page documents the Generate Key button, the Datahub API
  Keys field, the Skip Permission Check and Disable Introspection
  toggles, and points the workspace-permissions link at the current
  Studio UI Users and Roles doc instead of a dead Pimcore 6.x URL.
- The integrated tool is the GraphQL Playground, not GraphiQL. The
  README and the operators overview now describe the Playground and the
  field configuration dialog, whose operator tabs (Formatter,
  Transformer, Other) moved to the right panel.

The public endpoint path shown in the Playground,
/pimcore-graphql-webservices/products, confirms the endpoint documented
in Studio Integration.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LmFQ3VND6uUqMpWsmppz6
Recapture six query-sample screenshots by running each query in the
GraphQL Playground against the demo's products config and screenshotting
the live result:

- manufacturer_listing (getManufacturerListing with paging and sort)
- filtering (getManufacturerListing with a filter expression)
- sample_parentChildrenSiblings (getCar parent, children, siblings)
- many_to_many_object_relation (getCar categories relation)
- asset_metadata (getAsset custom metadata)
- asset_embeddedMetaInfo (getAsset embedded EXIF/IPTC info)

The previous images showed the removed ExtJS GraphiQL interface.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LmFQ3VND6uUqMpWsmppz6
The page described @internal Studio REST endpoints that Studio already
documents itself at /pimcore-studio/api/docs, and duplicated the permission
table from the installation chapter. It also documented none of the four
pre-response events the bundle actually dispatches.

Replace it with doc/05_Extending.md, which documents all four
(configuration, configuration_detail, permission_user, thumbnail) and points to
the much richer GraphQL event set. Keep the clarification that the API exposed
to other systems is the GraphQL endpoint, not the Studio API, in the GraphQL
chapter where readers look for it.

Screenshots: replace the chapter hero (it was an Admin Classic composite) and
the mutation schema grid with Pimcore Studio captures, and delete two images no
page references.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LmFQ3VND6uUqMpWsmppz6
@fashxp fashxp self-assigned this Jul 14, 2026
@fashxp fashxp added the Task label Jul 14, 2026
fashxp and others added 5 commits July 14, 2026 19:52
An earlier batch had replaced Pimcore-side source screenshots with GraphiQL panes,
which duplicated the query/response code blocks already on the page and dropped the
annotations that carried the explanation. Recapture all twelve against the current
Studio UI (2026.x) at 1440x900 with the side trees collapsed, matching what each page's
prose describes:

- general, schema_add, schema, security1, queryoperators_overview, open_explorer: the
  endpoint's General / Schema Definition / Security Definition tabs, the field
  configurator dialog (Class Attributes and Formatter panels, now distinct images), and
  the Schema Definition footer where the Playground opens.
- asset_metadata / asset_embeddedMetaInfo: the Custom Metadata and Embedded Meta Info
  tabs of the exact assets the adjacent GraphQL examples query (asset 4 and asset 295).
- filtering, manufacturer_listing, many_to_many_object_relation,
  sample_parentChildrenSiblings: the object grids and tree that the query samples read
  from, not a picture of the query itself.

Mask the live Datahub API key on the Security Definition tab. The schema.png /
schema_add.png byte-identical duplicate is resolved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Accuracy fixes verified against source:

- Per-configuration permissions are read/update/delete only. The Permissions
  tab grid renders exactly those three columns and Configuration::isAllowed()
  is only ever called with them; PLUGIN_DATA_HUB_PERMISSION_CREATE is declared
  but never used for configuration access ('create' exists only as a workspace
  check).
- Document the role fallback accurately: an entry matching the user's own name
  returns immediately, so roles are consulted only when the user has no entry,
  and only a role that explicitly grants the permission counts
  (Configuration.php:455-463).
- Note the automationIntegration.dataHubConfiguration perspective permission,
  which also gates the navigation entry, and that the frontend permission only
  hides the UI while #[IsGranted] protects the API.
- Operator groups: Formatter/Transformer/Other are registered on the query
  registry only; the mutation registry registers Other alone.
- Remove sqlObjectCondition from the deployment sample. It was removed in 2.0.0
  and no PHP reads it, which this branch already states elsewhere.

Admin Classic removal:

- Rewrite the frontend half of both Add a Custom Query/Mutation Operator pages.
  They described writing ExtJS JS under src/Resources/public/js (deleted in
  2026.1) and registering a pimcore.plugin.datahub.* namespace. Operators are
  now Studio dynamic types extending DynamicTypeOperatorAbstract, registered
  against the DataHub Query/Mutation operator registries. The PHP halves were
  correct and are kept.

Links:

- Replace 12 absolute pimcore.com/docs.pimcore.com URLs with GitHub file URLs.
- Unlink 6 references to Pimcore 6.x pages that have no current equivalent
  (Query Filters, Editable Naming Strategies, the TranslateValue grid
  operator), keeping the prose. A dead 6.x link is worse than none.

Structure and style:

- Rename 05_Extending.md to 05_Customization.md for cross-bundle consistency.
- Descriptive alt text for configuration3.png, which shows the navigation menu
  rather than a configuration overview.
- Drop a filler sentence and add a missing trailing newline.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The heading is 'Configuration Storage Locations and Fallbacks
(LocationAwareConfigRepository)', so the anchor is
#configuration-storage-locations-and-fallbacks-locationawareconfigrepository.
Caught by a purged npm run build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 20, 2026 12:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Modernizes Datahub documentation for Pimcore Studio and refreshes the generated Studio frontend bundle.

Changes:

  • Refines installation, permissions, deployment, customization, and GraphQL guidance.
  • Removes obsolete API documentation, demo links, and legacy references.
  • Regenerates Studio assets under a new build identifier.

Reviewed changes

Copilot reviewed 37 out of 71 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/Resources/public/studio/build/e31abccc-0f0b-4902-ba7a-f84a94b97404/manifest.json Removes old build manifest.
src/Resources/public/studio/build/e31abccc-0f0b-4902-ba7a-f84a94b97404/entrypoints.json Removes old entrypoints.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/remoteEntry.js.LICENSE.txt Adds dependency licenses.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/main.9c3ad8a2.js.LICENSE.txt Adds bundle license.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/840.b584be96.js.LICENSE.txt Adds chunk licenses.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/499.4aead98c.js.LICENSE.txt Adds chunk license.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/499.4aead98c.js Adds generated configuration chunk.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/__federation_expose_plugins.85a68c1a.js.LICENSE.txt Adds plugin chunk license.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/__federation_expose_plugins.85a68c1a.js Adds generated plugin export.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/__federation_expose_default_export.062d3a0b.js.LICENSE.txt Adds SDK chunk license.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/async/__federation_expose_default_export.062d3a0b.js Adds generated SDK export.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/static/js/109.62a4c31b.js.LICENSE.txt Adds runtime licenses.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/mf-stats.json Updates federation public path.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/mf-manifest.json Updates federation manifest path.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/manifest.json Adds new build manifest.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/main.html Updates generated script paths.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/exposeRemote.js Updates remote entry path.
src/Resources/public/studio/build/066991ef-dc72-4ec3-8fc0-dcc67df99d4b/entrypoints.json Adds new entrypoint metadata.
README.md Revises documentation links.
doc/30_Testing.md Adds page metadata.
doc/20_Deployment.md Corrects storage and deployment guidance.
doc/10_GraphQL/README.md Updates GraphQL and Playground guidance.
doc/10_GraphQL/10_Events.md Updates the events link.
doc/10_GraphQL/08_Operators/README.md Revises operator UI instructions.
doc/10_GraphQL/08_Operators/Query/TranslateValue.md Removes an obsolete link.
doc/10_GraphQL/07_Mutation/27_Add_Custom_Mutations.md Updates event documentation link.
doc/10_GraphQL/07_Mutation/26_Add_Custom_Mutation_Operator.md Documents Studio mutation operators.
doc/10_GraphQL/07_Mutation/24_Mutation_Samples/15_Fieldcollection_Mutations.md Updates field collection link.
doc/10_GraphQL/07_Mutation/20_DataObject_Mutations.md Updates datatype link.
doc/10_GraphQL/07_Mutation/01_Document_Mutations.md Removes obsolete naming links.
doc/10_GraphQL/04_Query/20_Add_Custom_Query.md Updates event documentation link.
doc/10_GraphQL/04_Query/16_Add_Custom_Query_Operator.md Documents Studio query operators.
doc/10_GraphQL/04_Query/11_Query_Samples/27_Sample_Translate_Values.md Removes stale demo link.
doc/10_GraphQL/04_Query/11_Query_Samples/26_Sample_Get_Linked_Data.md Removes stale demo link.
doc/10_GraphQL/04_Query/11_Query_Samples/24_Sample_Fieldcollections.md Removes stale demo link.
doc/10_GraphQL/04_Query/11_Query_Samples/12_Sample_Asset_Metadata.md Removes stale demo link.
doc/10_GraphQL/04_Query/11_Query_Samples/11_Sample_GetAsset.md Removes stale demo link.
doc/10_GraphQL/04_Query/10_Filtering.md Revises filtering introduction.
doc/10_GraphQL/04_Query/05_DataObject_Queries.md Updates datatype and filtering references.
doc/10_GraphQL/04_Query/04_Asset_Queries.md Revises filtering reference.
doc/10_GraphQL/01_Configuration/03_Security_Settings.md Expands endpoint security guidance.
doc/10_GraphQL/01_Configuration/01_General_Settings.md Updates general settings documentation.
doc/05_Customization.md Adds Studio event customization guidance.
doc/04_Studio.md Removes internal Studio API documentation.
doc/02_Basic_Principle.md Rewrites configuration overview.
doc/01_Installation_and_Upgrade/README.md Expands prerequisites and permissions.
doc/01_Installation_and_Upgrade/01_Upgrade_Notes.md Corrects routes and migration notes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread README.md
Comment thread doc/10_GraphQL/08_Operators/README.md
Comment thread doc/10_GraphQL/04_Query/16_Add_Custom_Query_Operator.md Outdated
Comment thread doc/10_GraphQL/04_Query/16_Add_Custom_Query_Operator.md Outdated
Comment thread doc/10_GraphQL/07_Mutation/26_Add_Custom_Mutation_Operator.md Outdated
Comment thread doc/10_GraphQL/07_Mutation/26_Add_Custom_Mutation_Operator.md Outdated
Comment thread doc/01_Installation_and_Upgrade/README.md Outdated
fashxp and others added 3 commits July 20, 2026 15:18
The Studio UI string is currently 'Data Hub Configuration'
(src/Resources/translations/studio.en.yaml), so this intentionally desyncs the
prose from the UI label and the configuration3.png screenshot. Documentation
spelling is 'Datahub' throughout; the product string should follow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Both were annotated Admin Classic captures whose recapture dropped the
explanation, so they are re-shot in Pimcore Studio at 1440x900 with the side
panels collapsed and the annotation reproduced.

manufacturer_listing.png
  The original was the Manufacturer grid sorted by Name with purple boxes on
  exactly the three rows a `limit 3, offset 1, sortBy: name` query returns. The
  previous recapture was sorted by ID, unannotated, and did not even include
  Aston Martin in frame, so it no longer showed anything the page claims. Now
  sorted by Name, with the box on Alfa Romeo (28), Aston Martin (240) and
  Austin-Healey (35). "Total 27 items" matches the documented totalCount.

open_explorer.png
  The original had arrows on the two buttons that open the GraphQL Playground.
  The previous recapture was an unannotated Schema Definition tab showing no
  query, no response and no Playground, while the caption above it described
  writing a query. Studio now has a single `Open in tab` button in the panel
  footer, so the arrow points at that.

The prose is corrected to match: this section is about opening the Playground,
and the "write a query on the left" sentence moves up to iexplorer.png, which
is the image that actually shows it. Descriptive alt text on all three.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous recapture left four unrelated widget tabs and an open element tab
in the tab bar, which is noise the reader has to look past. Both are re-shot
with only the tab the image is about open:

- manufacturer_listing.png: only the Manufacturer tab
- open_explorer.png: only the Data Hub Configuration tab

Content is otherwise unchanged: 1440x900, side panels collapsed, grid sorted by
Name with the box on Alfa Romeo / Aston Martin / Austin-Healey, and the arrow on
the Open in tab button.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@fashxp fashxp added this to the 2026.2.3 milestone Jul 20, 2026
fashxp and others added 2 commits July 20, 2026 18:50
Accepted from the review on PR #1122, each verified against source:

- The custom operator pages described a frontend extension path that is not
  actually available: DynamicTypeOperatorAbstract is not exported from
  assets/studio/js/src/sdk/index.ts, so another bundle's Studio plugin cannot
  import it. Both pages now carry a warning stating that, and mention the
  required `readonly id` member that was omitted.
- Fix the Studio UI links. studio-ui-bundle has no 1.x branch and no
  doc/README.md; point at
  2026.x/doc/04_Extending/01_Getting_Started_with_Your_First_Plugin.md.
- Scope the permission claim. Controller/Studio/GraphQL/ExplorerController.php
  carries no #[IsGranted] (11 of 12 controllers do), so say the
  configuration-management API is enforced rather than implying every endpoint
  is.

Rejected, with evidence:

- "The left/right description is reversed" for the schema fields dialog. Opened
  the dialog on the demo and measured it: Available Fields is the left column
  (x=244), the operator icon strip sits at x~730, and Class Attributes is the
  right panel (x=775). The text was already correct.
- "Link to the public platform documentation instead" for the five Further
  Information links. AGENTS.md mandates the GitHub file URL convention and
  explicitly forbids docs.pimcore.com, because the build rewrites and validates
  the former. Those four adapter repos are private, which is why they 404 when
  browsed; the published docs resolve them to relative links.
- "The Data Importer installation page is doc/01_Installation.md". On the
  restructure branch it is a directory with a README.md, which is what the link
  targets.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A Composer dependency is not an installed bundle. Spell out that the
Studio Backend and Studio UI bundles must be enabled and installed in
their own right.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gNY3NwTbQPwco5wyWgpE8
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants