Skip to content

TYPO3 13.4 LTS compatibility#1

Open
jloderhose wants to merge 11 commits into
mnediw:mainfrom
jloderhose:typo3-13-compatibility
Open

TYPO3 13.4 LTS compatibility#1
jloderhose wants to merge 11 commits into
mnediw:mainfrom
jloderhose:typo3-13-compatibility

Conversation

@jloderhose

Copy link
Copy Markdown

Hi,

First of all — thank you for building and sharing this extension, it's been really useful!

After updating to the latest version from Packagist, I ran into a number of errors on both TYPO3 12.4 LTS and 13.4 LTS (the current public releases). Most of them come from APIs that were deprecated or removed during the v12 → v13 transition.

I worked through the code and fixed the issues so the extension runs cleanly again on both LTS versions, and I added an upgrade wizard that migrates existing panorama plugins to the new content-type registration.

To make review easy, each change is a separate, self-contained commit (based on v1.0.3):

  • Replace the removed allowTableOnStandardPages() with the ctrl.security.ignorePageTypeRestriction TCA setting
  • Replace removed Extbase/DBAL APIs (ConfigurationManager::getContentObject(), Doctrine\DBAL\Connection::PARAM_, \PDO::PARAM_)
  • Remove the deprecated wrapper from the FlexForms
  • Move the inline <style> out of the Fluid template (the CSS braces broke Fluid's inline parsing)
  • Apply the TCA migrations for tx_pannellum_scene (required, type=number, item arrays, cruser_id)
  • Move the plugin's TCA registration out of ext_tables.php
  • Migrate the plugin from list_type to a dedicated CType, including an upgrade wizard for existing content elements
  • Register the wizard's page TSconfig via Configuration/page.tsconfig, with a fallback for TYPO3 12 where auto-inclusion isn't available yet
  • Guard the v13-only upgrade-wizard registration so the extension keeps working on TYPO3 12.4

I've tested the result on TYPO3 12.4 LTS and 13.4 LTS, and it works seamlessly for me on both.

Would you consider merging these changes and publishing an updated release? I'm happy to adjust anything, split the commits differently, or answer any questions.

Thanks again, and best regards

Jan Loderhose added 11 commits July 7, 2026 14:13
ExtensionManagementUtility::allowTableOnStandardPages() was removed in
TYPO3 v13. Configure the equivalent directly in the table's TCA via
ctrl.security.ignorePageTypeRestriction instead, and drop the call from
ext_tables.php.
Three APIs used by the plugin were removed in TYPO3 v13:

- ConfigurationManager::getContentObject() -> read the current content
  object from the request attribute "currentContentObject".
- Doctrine\DBAL\Connection::PARAM_INT_ARRAY (removed with DBAL 4) ->
  TYPO3\CMS\Core\Database\Connection::PARAM_INT_ARRAY.
- \PDO::PARAM_INT (unsupported by DBAL 4) ->
  TYPO3\CMS\Core\Database\Connection::PARAM_INT in SceneItemsProvider.
The extension scanner reports the "->data" access as a weak match for the
now-protected GifBuilder->data property (breaking #101955). Here the object
is the current ContentObjectRenderer, whose "data" array is public and
unaffected. Make the type explicit with an instanceof check (which also
collapses the two reads into one) and annotate it with
@extensionScannerIgnoreLine.
The <TCEforms> wrapper around FlexForm field configuration was auto-migrated
in v12 and the compatibility layer was removed in v13, causing the FlexForms
to render broken in the backend. Move the field configuration up one level as
required by TYPO3 v13.
Fluid treats "{" as the start of an inline expression, so the CSS braces in
the template's inline <style> block broke variable resolution for everything
after it (the element id and the JSON config attribute were emitted verbatim,
so the viewer never initialised). Move the styles to a dedicated stylesheet
loaded via <f:asset.css>.
Resolve the TCA migration warnings reported on TYPO3 v13:

- "required" moved out of the "eval" list into 'required' => true
  (identifier, title).
- eval="double2" fields migrated to TCA type "number" with
  'format' => 'decimal' (yaw, pitch, hfov and the min/max variants);
  obsolete "eval"/"size" dropped and defaults changed to floats.
- Removed the obsolete ctrl.cruser_id definition.
- "type" select items switched to associative keys (label/value).
TCA must not be modified in ext_tables.php (loaded too late; flagged by the
TYPO3 v13 "check TCA" report). Move the plugin registration to
Configuration/TCA/Overrides/tt_content.php (which already registered the
FlexForm and preview field) and delete the now-empty ext_tables.php.
The "General Plugin" (list_type) registration is deprecated in TYPO3 v13 and
removed in v14 (#105076). Register the plugin as its own content type:

- ext_localconf.php: configurePlugin() now uses PLUGIN_TYPE_CONTENT_ELEMENT.
- TCA/Overrides/tt_content.php: register as CType, replace the
  subtypes_addlist/excludelist handling with an explicit showitem, and
  register the FlexForm for the new CType.
- PageTS wizard item now sets CType = pannellum_panorama.
- Add an upgrade wizard (AbstractListTypeToCTypeUpdate) to convert existing
  content elements from list_type to the new CType.
ExtensionManagementUtility::addPageTSConfig() is deprecated in TYPO3 v13 and
removed in v14 (#101799). TYPO3 automatically includes an extension's
Configuration/page.tsconfig, so move the wizard TSconfig there and drop the
call from ext_localconf.php.
AbstractListTypeToCTypeUpdate, the base class of the list_type -> CType
upgrade wizard, only exists in TYPO3 v13. With the previous Services.yaml the
DI container reflected every class under Classes/, so building the container
on TYPO3 v12.4 fataled on the missing base class even though the extension
otherwise supports v12.4.

Move the service configuration to Configuration/Services.php, exclude
Classes/Updates from the default autoloading, and register the upgrade wizard
only when running on TYPO3 v13 or newer.
Automatic inclusion of an extension's Configuration/page.tsconfig was
introduced in TYPO3 v13. On v12.4 the file is not loaded, so the content
element wizard configuration would be missing. Import it explicitly via
addPageTSConfig() when running on TYPO3 versions older than 13; on v13+ the
automatic inclusion is used and the manual import is skipped.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant