Important: #82445 - Migrate pages_language_overlay into pages

See forge#82445

Description

The functionality of "pages_language_overlay" has been migrated into "pages".

An upgrade wizard is in place to migrate all existing data into the "pages" database table.

All relations directly to "pages_language_overlay" are migrated to the newly created "pages" records as well.

Some rules for future development need to be clarified:

Definitions:

Default Language Page

  • previously exclusively available in "pages"

  • Holds the PID of the parent page

  • MUST be in place in order to create a translated page (not possible to create a translated page without having a default page in place)

  • Has always "l10n_parent" and "sys_language_uid" fields set to "0"

  • The "uid" of this record is automatically the PID for all records of this page

Translated Page (previously known as "pages_language_overlay")

  • Is identified as Translated Page by having a "sys_language_uid" field greater 0 and "l10n_parent" field containing the "uid" of the Default Language Page.

  • The value of the "pid" field is the same "pid" as of the Default Language Page - effectively putting the Translated Page and the Default Language Page on the same root-level.

  • The value of "sorting" is the same for all translated pages

  • The "uid" field is not used by anything currently within the TYPO3 Core.

  • The "hidden" field is set as "allowLanguageSynchronization"

The following details apply

  • Any TCA-based records (= subpages, content elements) still ALWAYS contain the pid to the Original Language Page, a DataHandler restriction ensures this constraint.

  • Backend: All UI elements like Element Browser, Page Browser etc. are restricted to only show the Default Language Pages to be selected (one can not link to a specific Translated Page).

  • Permissions are always fetched from the "Original Language Page"

  • DataHandler: Moving or deleting of a Default Language Page always moves/deletes the associated Translated Page records as well.

  • DataHandler: "sorting" and "pid" parameters of translations are always kept in sync one-to-one for translated pages. Translated pages cannot be moved themselves.

  • Permissions: Restricting a Backend User/Group to a language limits the access to "pages" to a specific language in page module.

  • Permissions: All existing "pages_language_overlay" permissions are merged into "pages" options for all records - when a Backend User/Group is limited to only certain languages (and not the default language) this , the . If a Backend User/Group does have permission on "pages_language_overlay" but not "pages", the Backend User/Group has automatically assigned all translations (sys_language_uid) as language limitations.

  • Frontend: Requesting a page can be done with ?id=originalpage&L=1 or ?id=translatedpage where "?id=translatedpage" internally resolves the "id" parameter to the uid of the Original Language Page and the "L" parameter resolved to the "sys_language_uid" corresponding in the TypoScript options.

  • Frontend: All "pid" checks are always done against the Original Language Page, as all records still sit on that page.

  • Frontend: Generating a link to a Default Language Page with a current Translated Page generated, will exchange the target on link creation to the targeted Translated Page automatically.