sabbelasichon / typo3-rector

Rector for TYPO3
MIT License
223 stars 62 forks source link

Breaking: #97358 - Removed eval=int from TCA type "datetime" #2923

Closed sabbelasichon closed 7 months ago

sabbelasichon commented 2 years ago

Breaking: #97358 - Removed eval=int from TCA type "datetime"

https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/12.0/Breaking-97358-RemovedEvalintFromTCATypeDatetime.html .. include:: /Includes.rst.txt

============================================================ Breaking: #97358 - Removed eval=int from TCA type "datetime"

See :issue:97358

Description

With :issue:97232 the new TCA type :php:datetime has been introduced. To further improve the usage of the new dedicated TCA type and to further reduce complexity in the configuration, the :php:eval=int option has now been removed as well. All TCA type :php:datetime fields, which do not use a native database type (:php:dbType) are now always handled with :php:int.

It is therefore recommended to represent them by an :sql:integer database field. To allow negative timestamps - used for dates before 1970 - the :sql:integer database fields are required to be defined as :sql:signed. This means, the :sql:unsigned definiton must be omitted.

.. note::

TYPO3 automatically creates database fields for all TCA type
:php:`datetime` columns, if those are not already manually
defined in the corresponding extensions' :file:`ext_tables.sql` file.

Impact

All TCA :php:datetime fields are now always handled with :php:int, as long as no native database type is used.

TCA type :php:datetime was the last TCA type using :php:eval=int. Therefore, the :php:int option is no longer evaluated by neither FormEngine nor :php:DataHandler. This means, custom FormEngine elements, which do currently rely on this option being evaluated in any way, have to implement the necessary functionality by themselves now.

Affected Installations

All installations which use TCA type :php:datetime columns without a native database type (:php:dbType). Also installations, using a non :php:int default value in TCA.

All installations, relying on evaluation of the :php:eval=int option for their custom FormEngine elements.

Migration

Remove :php:eval=int from any TCA column of type :php:datetime.

Migrate necessary functionality, related to TCA option :php:eval=int, to your custom extension code, since FormEngine does no longer evaluate this option.

Migrate :php:default values for TCA type :php:datetime fields to :php:int (e.g. '' to 0).

Migrate corresponding database fields to :sql:integer where applicable.

.. code-block:: sql

# Before
CREATE TABLE tx_ext_my_table (
    datetime text
);

# After
CREATE TABLE tx_ext_my_table (
    datetime int(11) DEFAULT '0' NOT NULL,
);

.. note::

In case the corresponding TCA field defines :php:`eval=null`, the
:sql:`NOT NULL` definition must be omitted.

.. note::

In case you don't need any manual configuration (e.g. a special default
value), you can omit the definition of the database field, since TYPO3
automatically creates those fields for TCA type :php:`datetime` columns.

.. index:: Backend, Database, PHP-API, TCA, NotScanned, ext:backend

simonschaufi commented 7 months ago

Maybe we can also get the SQL part running but for this we first need an SQL processor.

sabbelasichon commented 7 months ago

No more FileProcessors