Add an OcflExporter service that builds the complete object for a node:
node.json plus the binaries of
- media pointing at the node through the "media of" field (Islandora:
field_media_of), stored under media/{media uuid}/,
- media referenced from the node's own media reference fields, and
- files in the node's own file/image fields, under files/{field}/.
node.json gains a media list (each media's metadata, how it is
associated with the node and the logical paths of its files) and a files
list. Standalone media objects include their own files too.
Automatic exports are queued and run once per node when the request ends
(needs_destruction), so saving a node together with several media creates
a single version. Media inserts, updates and deletes queue the media's
parent nodes, before and after the change, so derivatives and removed
media are reflected in the node's object. A successful export invalidates
the entity's cache tags so the export status shown on its page is current.
The controller, bulk actions and hooks now go through the exporter.
New settings, with an update hook to add them to existing sites:
include_files, media_of_field, member_of_field and model_field (the
latter two are used by the node serializer for membership data).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>