Translations
Info
All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

TYPO3.CMS/Releases/7.3/Breaking

From TYPO3Wiki
Jump to: navigation, search

Contents

Breaking: #62983 - postProcessMirrorUrl signal has moved

Description

While refactoring the Language backend module, the \TYPO3\CMS\Lang\Service\UpdateTranslationService::postProcessMirrorUrl signal got lost. Due to the refactoring, it has been integrated in another class.

Impact

Using the old signal will prevent the slot from being called.

Affected Installations

All extensions are affected that use the old \TYPO3\CMS\Lang\Service\UpdateTranslationService::postProcessMirrorUrl signal.

Migration

Change the slot to use the \TYPO3\CMS\Lang\Service\TranslationService::postProcessMirrorUrl signal. If it is required to serve multiple TYPO3 versions, use the following code:

$signalSlotDispatcher->connect(
    version_compare(TYPO3_version, '7.0', '<')
        ? 'TYPO3\\CMS\\Lang\\Service\\UpdateTranslationService'
        : 'TYPO3\\CMS\\Lang\\Service\\TranslationService',
    'postProcessMirrorUrl',
    'Vendor\\Extension\\Slots\\CustomMirror',
    'postProcessMirrorUrl'
);

Breaking: #63453 - Changed rendering of FlashMessagesViewHelper

Description

The default (renderMode="ul") rendering output of the FlashMessagesViewHelper has been changed.

By default the view helper rendered an unordered list, each list item containing one message. This output has been adjusted and more markup has been added.

Impact

You may see unexpected formatting of flash messages.

Affected Installations

Any template using the FlashMessagesViewHelper unless the attribute renderMode is set to "div". Be aware that the renderMode attribute has been deprecated.

Migration

Add a custom rendering template for the flash messages, like outlined in the example, to obtain the same output as before.

<f:flashMessages as="flashMessages">
    <ul class="myFlashMessages">
        <f:for each="{flashMessages}" as="flashMessage">
            <li>{flashMessage.message}</li>
        </f:for>
    </ul>
</f:flashMessages>

Breaking: #63835 - Remove Deprecated Parts in Extbase Persistence Layer

Description

The previously deprecated functions TYPO3\CMS\Extbase\Persistence\Generic\Backend->setDeletedObjects() and TYPO3\CMS\Extbase\Persistence\Repository->replace() inside the Persistence Layer of Extbase have been removed. The protected property "session" inside TYPO3\CMS\Extbase\Persistence\Repository has been removed as well.

Impact

Any direct calls to the methods will now exit with a PHP Fatal Error.

Breaking: #63846 - FormEngine refactoring

Description

FormEngine is the core code structure that renders a record view in the backend. Basically everything that is displayed if elements from page or list module are edited is done by this code.

The main implementation was done thirteen years ago and was never touched on a deep code structure level until now. The according patches were huge and move the whole code to a new level. Stuff like that can not be done without impact on extensions that use this code.

Impact

TCA changes

  • Keys _PADDING, _VALIGN and DISTANCE of TCA['aTable']['columns']['aField']['config']['wizards'] have been removed and have no effect anymore.
  • Key TCA['aTable']['ctrl']['mainPalette'] has been dropped and has no effect anymore.

TSconfig changes

  • Key mod.web_layout.tt_content.fieldOrder has been dropped and has no effect anymore.
  • Key TCEFORM.aTable.aField.linkTitleToSelf has been dropped and has no effect anymore.

Code level

Most methods and properties from FormEngine except the main entry methods like getMainFields() are not available anymore. Classes like InlineElement are gone. New structures like a factory for elements and container have been introduced. While not too many extensions in the wild hook or code with FormEngine, those that do will probably throw fatal errors after upgrade. The hook getSingleFieldClass has been removed altogether.

Changed user functions and hooks

  • TCA: If format of type none is set to user, the configured userFunc no longer gets an instance of FormEngine as parent object, but an instance of NoneElement.
  • TCA: Wizards configured as userFunc` now receive a dummy FormEngine object with empty properties instead of the real instance.
  • Hooks no longer get the key form_type. Use type instead.
  • Hook getSingleFieldClass has been dropped and no longer called.

Breaking interface changes

  • The type hint to FormEngine as $pObj has been removed on the DatabaseFileIconsHookInterface. This hook is no longer given an instance of FormEngine.
  • Method init() of InlineElementHookInterface has been removed. Classes that implement this interface will no longer get init() called.

Affected installations

For most instances, the overall impact is rather low or they are not affected at all. Some very rarely used TCA and TSconfig options have been dropped, those will do no harm. Instances are usually only affected if loaded extensions do fancy stuff with FormEngine with hooks or other related code.

TYPO3 CMS 7 installations with extensions using or hooking into FormEngine and its related classes are likely to break. TCA elements of type user may break. Instances using these parts will quickly show fatal errors at testing. It may help to search for FormEngine or t3lib_tceForms below the typo3conf/ext directory to find affected instances.

Migration

Adapt the extension code. The majority of methods were for internal core usage only, but still public. Please use the existing API to solve needs on FormEngine.

Breaking - #66429: Remove IdentityMap from persistence

Description

The IdentityMap class and its usage has been removed from the Extbase persistence.

Impact

Upgraded installations will throw a ReflectionException. Accessing the previously existing IdentityMap properties within DataMapper and Repository will now fail. Creating IdentityMap instances is not possible anymore.

Affected Installations

All installations, especially extensions using the IdentityMap class directly or accessing the properties within DataMapper or Repository.

Migration

The Extbase reflection cache of existing installations needs to be cleared once.

Existing code can be migrated to the persistence Session class which provides a drop-in replacement for the IdentityMap.

Usage example

How to use the Session class to retrieve objects by an identifier:

$session = GeneralUtility::makeInstance(ObjectManager::class)->get(\TYPO3\CMS\Extbase\Persistence\Generic\Session::class);
$session->registerObject($object, $identifier);
if ($session->hasIdentifier($identifier)) {
    $object = $session->getObjectByIdentifier($identifier, $className);
}

Breaking: #66669 - Backend LoginController refactored

Description

The backend login has been completely refactored and a new API has been introduced. The openid form has been extracted and is now using the new API as well.

Impact

All former member variables of the LoginController class have been removed or made protected, together with some, now pointless, hooks and their related classes.

The deleted hooks are:

  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/index.php']['loginScriptHook']
  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/index.php']['loginFormHook']

The removed class and its alias:

  • TYPO3\CMS\Rsaauth\Hook\LoginFormHook
  • tx_rsaauth_loginformhook

Affected Installations

Any code manipulating the BE login.

Migration

Use the new backend login form API.

Breaking: #66707 - issueCommand() now adds quotes when used in JS context

Description

Using \TYPO3\CMS\Backend\Template\DocumentTemplate::issueCommand() in JavaScript context (second parameter = -1), now ensures that the URL is properly escaped and quoted for being used in JavaScript code.

Impact

Having additional quotes around the result of the call to issueCommand() will lead to JavaScript errors.

Affected Installations

Any installation using third party extensions, which use issueCommand() with second parameter set to -1.

Migration

Make sure that you do not specify any additional quotes around the result of the call to issueCommand().

Breaking: #66754 - Remove RenderingContextAwareInterface

Description

The RenderingContextAwareInterface allowed objects to get the RenderingContext set while being accessed from inside a Fluid template. This makes optimization of variable access in Fluid difficult and seems to be an unused feature. Therefore it has been removed.

Impact

For implementations of RenderingContextAwareInterface the change breaks without any simple replacement. Functionality would have to be replicated in userland code. But as there are no known implementations the expected impact is rather low.

Breaking interface changes

  • The RenderingContextAwareInterface has been removed. There is no replacement.

Breaking: #66868 - Move usage of BackendUserSettingsDataProvider

Description

The ExtDirect API BackendUserSettingsDataProvider has been removed.

Impact

Third party code using either BackendUserSettingsDataProvider or top.TYPO3.BackendUserSettings.ExtDirect will fatal.

Affected Installations

Any installation using BackendUserSettingsDataProvider or top.TYPO3.BackendUserSettings.ExtDirect is affected.

Migration

In JavaScript, use TYPO3.Storage.Persistent API. In PHP, use `TYPO3CMSBackendControllerUserSettingsController`:

/** @var $userSettingsController \TYPO3\CMS\Backend\Controller\UserSettingsController */
$userSettingsController = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Controller\UserSettingsController::class);
$state = $userSettingsController->process('get', 'BackendComponents.States.' . $stateId);

Breaking: #66906 - Automatic PNG to GIF conversion removed

Description

The configuration setting $TYPO3_CONF_VARS[GFX][png_to_gif] has been removed.

Impact

If the option is set in an installation, then PNG images used in the TYPO3 Frontend will now be kept as PNG, instead of converting them to GIF files.

Affected Installations

Installations having the option $TYPO3_CONF_VARS[GFX][png_to_gif] activated.

Breaking: #66991 - TCA value slider based on jQuery

Description

The TCA value slider has been ported from ExtJS to jQuery and Bootstrap.

Impact

Since TYPO3 CMS 7 uses a DateTimePicker, the time selection conflicts with the value slider and therefore time-sliding has been dropped.

Affected Installations

All installations are affected whose TCA uses the value slider wizard in combination with time evaluation.

Migration

Remove the slider wizard from affected TCA.

Breaking: #66997 - Remove super-/challenged password security

Description

TYPO3 CMS supports four possibilities how passwords can be sent from the browser to the server:

  • "normal": Plain text
  • "challenged": md5 hashed
  • "superchallenged": md5 hashed
  • "rsa": asymmetric encryption

Since TYPO3 CMS 6.2 the password transmission is protected by the rsaauth-extension by default ("rsa"), which renders the old protection mechanisms "superchallenged" and "challenged" useless.

If the Backend login is accessed via HTTPS protocol, the "rsa" protection is redundant and can be disabled in general.

The super-/challenged options are removed, as "rsa" and "normal" are sufficient. If rsaauth was not installed the default has been "superchallenged". The new default is "normal" now.

Impact

If an installation has rsaauth disabled, the password transfer is now Plain Text.

Any code relying on or checking for the "superchallenged" or "challenged" option of [BE][loginSecurityLevel] or [FE][loginSecurityLevel], will not work as expected.

Affected Installations

Any installation having set [BE][loginSecurityLevel] or [FE][loginSecurityLevel] to an empty string or to either of "superchallenged" or "challenged".

Migration

Make sure you access the Backend via HTTPS or install the rsaauth system extension.

Also refer to the TYPO3 Security Guide

Breaking: #67027 - Removed FLOW-compatibility from PackageManager

Description

The Package Manager has been simplified and trimmed down to fit the needs of the TYPO3 extensions and typical Composer packages. All shipped code backported from Flow was removed or refactored to be included in the TYPO3 Core natively. Loading classes are done with the Composer class loader or by the conventions of extension namings. All default Composer packages can still be included as usual, however the custom Flow-logic has been removed.

Impact

It is not possible to add custom Package.php loaders into TYPO3 extensions anymore to be called during runtime. It is not possible to configure extensions with custom Classes/ directories and custom composer.json locations anymore. There is no special handling for "typo3-flow" packages anymore. The typo3conf/PackageStates.php file now only contains the parts that are necessary for the TYPO3 system.

Affected Installations

All installations using custom functionality of the PackageManager not in use with the TYPO3 Core, or installations trying to use Flow packages natively in the TYPO3 Core.

Migration

Use Composer packages natively for class loading, or use ext_localconf.php to additionally configure a package.

Breaking: #67204 - DatabaseConnection::exec_SELECTgetRows() may throw exception

Description

DatabaseConnection::exec_SELECTgetRows() validates $uidIndexField parameter now. If the specified field is not present in the database result an InvalidArgumentException is thrown.

Impact

This change will affect only broken usages of DatabaseConnection::exec_SELECTgetRows() with an invalid last parameter.

It is very unlikely that existing code affected by this change, since using the method in a wrong way had the consequence that it only returned the last row from the result.

Affected Installations

Any code using the DatabaseConnection::exec_SELECTgetRows() method with $uidIndexField being set to a field name not present in the queried result set.

Migration

Fix your call to the method and correct the $uidIndexField parameter.

Breaking: #67212 - Discard TYPO3 class loader

Description

The former TYPO3 class loader has been removed in favor of the composer class loader.

Impact

ext_autoload.php files are not evaluated any more. Instead all class files are registered automatically during extension installation and written into a class map file. This class map file is not changed during regular requests, but only if the extension list changes (by using the Extension Manager).

These class information files are located in the typo3temp/autoload/ directory and will also be automatically created if they do not exist.

Non-namespaced classes with Tx_ naming convention like Tx_Extension_ClassName are only resolved through the aforementioned class map, but not dynamically. This means that extension authors need to re-generate the class map files when introducing new classes. Thus it is highly recommended to use a Classes folder with PSR-4 standard class files in there.

When installing TYPO3 with composer, it also means that all extensions need to bring their own composer.json file with class loading information or the class loading information of all extensions need to be specified in the root composer.json for class loading to work properly.

Affected Installations

All installations are affected.

Migration

No migration is needed during upgrade if TYPO3 is installed in the classic way. If TYPO3 is installed in a distribution via composer, missing class loading information need to be provided in root composer.json for all extensions which do not bring their own composer.json manifest.

{
    "autoload": {
        "psr-4": {
            "GeorgRinger\\News\\": "typo3conf/ext/news/Classes/",
            "MyAwesomeNamespace\\IncrediExt\\": "typo3conf/ext/incredible_extension/Resources/PHP/Libraries/lib/"
        }
    }
}

Breaking: #67229 - FormEngine related classses

Description

With the further development of FormEngine, some minor changes on PHP level have been applied:

  • Class TYPO3\CMS\T3editor\FormWizard has been removed
  • Class TYPO3\CMS\Rtehtmlarea\Controller\FrontendRteController has been removed
  • The method signature of class TYPO3\CMS\Utility\BackendUtility method getSpecConfParts has changed

Impact

Using code will fatal or not be called any longer.

Affected Installations

If extensions use above classes or methods. Since these classes are mostly core internal it is quite unlikely any project in the wild is affected.

Migration

Use the newly introduced API.

Breaking: #67402 - Extbase AbstractDomainObject initializeObject

Description

Method initializeObject() has been removed from TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject.

Impact

Possible fatal error in Extbase if objects are thawed from persistence.

Affected Installations

Domain objects extending AbstractDomainObject and calling parent::initializeObject(). This is relatively unlikely since the default implementation of initializeObject() is empty.

Migration

Remove calls to parent::initializeObject() from own initializeObject() implementations.

Breaking: #67402 - Extbase AbstractDomainObject __wakeup()

Description

Method __wakeup() in classes extending TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject is no longer called if objects are created when fetched from persistence.

Affected Installations

An instance is affected if own domain objects extending AbstractDomainObject implement own __wakeup() methods. Those methods are no longer called.

Migration

Move initialization code from __wakeup() to initializeObject(). As a bonus, dependencies have been injection at this point already.