Breaking: The profile image translates
See also
Upgrading from 2.4 to 3.0 is the order in which the 3.0 changes have to be applied.
Description
The
image
column of
tx_ was
declared
'l10n_ with
'l10n_: every translation of a profile
carried the default-language image, the translation form showed it read-only,
and there was no way to give one language a picture of its own.
The column now declares
'behaviour' =>
instead. A translation starts out following the default-language image — the
core's parent localization state, which is also what every existing
translation is in, because no
l10n_ has been stored for the column
yet — and switches to the custom state as soon as it gets an image of its
own. In the parent state an image the default-language profile gains or
changes reaches the translation on the next write of the default record
through the TYPO3 DataHandler — a backend save and the translation
synchronisation of this extension both are one — and a removal reaches it
through the DataHandler's own delete cascade, which deletes the localizations
of a deleted reference. In the custom state the translation keeps its
image whatever happens to the default one.
The relation itself is written by one service,
\FGTCLB\ (
@internal
),
which drives every change through the DataHandler and maintains the
localization state. The frontend profile editing of
EXT: uses that service as well from 3.0.0 on - its
editor replacement of the same release no longer writes the image relation
through Extbase - so an image uploaded there for a translation reaches the
custom state exactly as a backend upload does.
The title and alternative text of the image reference follow the name of the
profile record the reference belongs to: a backend save, a localization and a
frontend profile update all rewrite the
title
and
alternative
of
the profile's own
sys_ row from that record's title and
names. Only the reference row is written; the
sys_ row of
the file, which a file may share between the languages of a profile, stays the
backend editor's. The one write of that record is the frontend upload that
creates the file, which fills its empty required attributes once — see the
changelog entry Important: An uploaded profile image carries its metadata of
fgtclb/academic-persons-edit
.
Impact
- The backend translation form shows the image field editable, with the language synchronization toggle the core renders for such columns. An editor can keep a translation in sync with the default language or give it an image of its own.
- The translation synchronisation of this extension (see Important: Translation sync covers child exclude columns) needs no change for it: the same core pass that propagates the exclude columns honours the localization state of the image.
- The image reference of a profile carries the profile's name as title and
alternative text after the next save of the record — from a backend save,
a localization, or a profile update announced through
After. A title or alternative text maintained on the reference row by hand is overwritten then; text maintained on the file's metadata is never touched by it.Profile Update Event - Workspaces are unchanged for an edit: the writer addresses live records and lets the DataHandler produce the versioned rows, so a draft edit of a profile image stays in its workspace. An installation-wide repair is the exception and says so: the repair wizard of fgtclb/academic-persons-edit skips workspace rows and acts in the live workspace regardless of the workspace the person running it has selected.
- Code that read the image of a translation through the default-language record — because the translation could never differ — has to resolve the translation's own reference now.
Affected Installations
Every installation with translated profiles. Existing data needs no change: translations without a stored localization state follow the default-language image exactly as before.
Installations that uploaded profile images through
academic_ before 3.0 should run the upgrade wizard
academic of that extension, which
brings the relation rows the old upload and synchronisation paths wrote into
the shape the localization state expects.