From f2fe50ed68d51106f2495ba31c802e93f2f33dc0 Mon Sep 17 00:00:00 2001 From: Christian Kuhn <lolli@schwarzbu.ch> Date: Fri, 14 Jun 2024 12:56:03 +0200 Subject: [PATCH] [TASK] Streamline DefaultTcaSchema Have a switch/case for the main per-type construct and avoid loops per type. Resolves: #104110 Related: #101553 Releases: main Change-Id: I8c4751a266c979fa96f78a6328e1a70e02e1b91f Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84714 Tested-by: core-ci <typo3@b13.com> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de> Tested-by: Andreas Kienast <a.fernandez@scripting-base.de> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Reviewed-by: Benni Mack <benni@typo3.org> --- .../Database/Schema/DefaultTcaSchema.php | 1153 +++++++---------- ...ewImportPageAndRecordsByUpdateWithDiff.php | 8 +- ...derPreviewImportPageAndRecordsWithDiff.php | 8 +- .../Fixtures/XmlExports/irre-records.xml | 18 +- .../pages-and-ttcontent-complex.xml | 16 +- ...-and-ttcontent-multilingual-onlysingle.xml | 6 +- ...ages-and-ttcontent-multilingual-single.xml | 12 +- .../pages-and-ttcontent-multilingual.xml | 54 +- ...pages-and-ttcontent-with-corrupt-image.xml | 32 +- ...s-and-ttcontent-with-flexform-relation.xml | 12 +- ...s-and-ttcontent-with-flexform-softrefs.xml | 18 +- ...-ttcontent-with-image-but-not-included.xml | 32 +- .../pages-and-ttcontent-with-image.xml | 32 +- .../pages-and-ttcontent-with-softrefs.xml | 18 +- .../XmlExports/pages-and-ttcontent.xml | 30 +- .../Fixtures/XmlImports/irre-records.xml | 18 +- 16 files changed, 653 insertions(+), 814 deletions(-) diff --git a/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php b/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php index c99a7c90ebdf..746d1590b7bd 100644 --- a/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php +++ b/typo3/sysext/core/Classes/Database/Schema/DefaultTcaSchema.php @@ -453,515 +453,115 @@ class DefaultTcaSchema if (!isset($tableDefinition['columns']) || !is_array($tableDefinition['columns'])) { continue; } + $tableConnectionPlatform = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName)->getDatabasePlatform(); - // Add category fields for all tables, defining category columns (TCA type=category) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'category' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - - if (($fieldConfig['config']['relationship'] ?? '') === 'oneToMany') { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } else { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => 0, - 'notnull' => true, - 'unsigned' => true, - ] - ); - } - } - - // Add datetime fields for all tables, defining datetime columns (TCA type=datetime), except - // those columns, which had already been added due to definition in "ctrl", e.g. "starttime". - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'datetime' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - - if (in_array($fieldConfig['config']['dbType'] ?? '', QueryHelper::getDateTimeTypes(), true)) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - $fieldConfig['config']['dbType'], - [ - 'notnull' => false, - ] - ); - } else { - // int unsigned: from 1970 to 2106. - // int signed: from 1901 to 2038. - // bigint unsigned/signed: from whenever to whenever - // - // Anything like crdate,tstamp,starttime,endtime is good with - // "int unsigned" and can survive the 2038 apocalypse (until 2106). - // - // However, anything that has birthdates or dates - // from the past (sys_file_metadata.content_creation_date) was saved - // as a SIGNED INT. It allowed birthdays of people older than 1970, - // but with the downside that it ends in 2038. - // - // This is now changed to utilize BIGINT everywhere, even when smaller - // date ranges are requested. To reduce complexity, we specifically - // do not evaluate "range.upper/lower" fields and use a unified type here. - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::BIGINT, - [ - 'default' => 0, - 'notnull' => !($fieldConfig['config']['nullable'] ?? false), - 'unsigned' => false, - ] - ); - } - } - - // Add slug fields for all tables, defining slug columns (TCA type=slug) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'slug' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'length' => 65535, - 'notnull' => false, - ] - ); - } - - // Add json fields for all tables, defining json columns (TCA type=json) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'json' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::JSON, - [ - 'notnull' => false, - ] - ); - } - - // Add uuid fields for all tables, defining uuid columns (TCA type=uuid) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'uuid' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 36, - 'default' => '', - 'notnull' => true, - ] - ); - } - - // Add file fields for all tables, defining file columns (TCA type=file) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'file' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => 0, - 'notnull' => true, - 'unsigned' => true, - ] - ); - } - - // Add folder fields for all tables, defining file columns (TCA type=folder) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'folder' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } - - // Add email fields for all tables, defining email columns (TCA type=email) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'email' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $isNullable = (bool)($fieldConfig['config']['nullable'] ?? false); - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 255, - 'default' => ($isNullable ? null : ''), - 'notnull' => !$isNullable, - ] - ); - } - - // Add check fields for all tables, defining check columns (TCA type=check) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'check' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::SMALLINT, - [ - 'default' => $fieldConfig['config']['default'] ?? 0, - 'notnull' => true, - 'unsigned' => true, - ] - ); - } - - // Add file fields for all tables, defining crop columns (TCA type=imageManipulation) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'imageManipulation' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } - - // Add fields for all tables, defining language columns (TCA type=language) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'language' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => 0, - 'notnull' => true, - 'unsigned' => false, - ] - ); - } - - // Add fields for all tables, defining group columns (TCA type=group) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'group' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - if (isset($fieldConfig['config']['MM'])) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => 0, - 'notnull' => true, - 'unsigned' => true, - ] - ); - } else { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } - } - - // Add fields for all tables, defining flex columns (TCA type=flex) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'flex' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } - - // Add fields for all tables, defining text columns (TCA type=text) foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'text' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { + if ($this->isColumnDefinedForTable($tables, $tableName, $fieldName)) { continue; } - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); - } - - // Add fields for all tables, defining password columns (TCA type=password) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'password' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { + $type = (string)($fieldConfig['config']['type'] ?? ''); + if ($type === '') { continue; } - if ($fieldConfig['config']['nullable'] ?? false) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'default' => null, - 'notnull' => false, - ] - ); - } else { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'default' => '', - 'notnull' => true, - ] - ); - } - } - // Add fields for all tables, defining color columns (TCA type=color) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'color' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - if ($fieldConfig['config']['nullable'] ?? false) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 7, - 'default' => null, - 'notnull' => false, - ] - ); - } else { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 7, - 'default' => '', - 'notnull' => true, - ] - ); - } - } + switch ($type) { + case 'category': + if (($fieldConfig['config']['relationship'] ?? '') === 'oneToMany') { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'notnull' => false, + ] + ); + } else { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'default' => 0, + 'notnull' => true, + 'unsigned' => true, + ] + ); + } + break; - // Add fields for all tables, defining radio columns (TCA type=radio) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'radio' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $hasItemsProcFunc = ($fieldConfig['config']['itemsProcFunc'] ?? '') !== ''; - $items = $fieldConfig['config']['items'] ?? []; + case 'datetime': + // Add datetime fields for all tables, defining datetime columns (TCA type=datetime), except + // those columns, which had already been added due to definition in "ctrl", e.g. "starttime". + if (in_array($fieldConfig['config']['dbType'] ?? '', QueryHelper::getDateTimeTypes(), true)) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + $fieldConfig['config']['dbType'], + [ + 'notnull' => false, + ] + ); + } else { + // int unsigned: from 1970 to 2106. + // int signed: from 1901 to 2038. + // bigint unsigned/signed: from whenever to whenever + // + // Anything like crdate,tstamp,starttime,endtime is good with + // "int unsigned" and can survive the 2038 apocalypse (until 2106). + // + // However, anything that has birthdates or dates + // from the past (sys_file_metadata.content_creation_date) was saved + // as a SIGNED INT. It allowed birthdays of people older than 1970, + // but with the downside that it ends in 2038. + // + // This is now changed to utilize BIGINT everywhere, even when smaller + // date ranges are requested. To reduce complexity, we specifically + // do not evaluate "range.upper/lower" fields and use a unified type here. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::BIGINT, + [ + 'default' => 0, + 'notnull' => !($fieldConfig['config']['nullable'] ?? false), + 'unsigned' => false, + ] + ); + } + break; - // With itemsProcFunc we can't be sure, which values are persisted. Use type string. - if ($hasItemsProcFunc) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 255, - 'default' => '', - 'notnull' => true, - ] - ); - continue; - } + case 'slug': + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'length' => 65535, + 'notnull' => false, + ] + ); + break; - // If no items are configured, use type string to be safe for values added directly. - if ($items === []) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => 255, - 'default' => '', - 'notnull' => true, - ] - ); - continue; - } + case 'json': + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::JSON, + [ + 'notnull' => false, + ] + ); + break; - // If only one value is NOT an integer use type string. - foreach ($items as $item) { - if (!MathUtility::canBeInterpretedAsInteger($item['value'])) { + case 'uuid': $tables[$tableName]->addColumn( $this->quote($fieldName), Types::STRING, [ - 'length' => 255, + 'length' => 36, 'default' => '', 'notnull' => true, ] ); - // continue with next $tableDefinition['columns'] - // see: DefaultTcaSchemaTest->enrichAddsRadioStringVerifyThatCorrectLoopIsContinued() - continue 2; - } - } - - // Use integer type. - $allValues = array_map(fn(array $item): int => (int)$item['value'], $items); - $minValue = min($allValues); - $maxValue = max($allValues); - // Try to safe some bytes - can be reconsidered to simply use Types::INTEGER. - $integerType = ($minValue >= -32768 && $maxValue < 32768) - ? Types::SMALLINT - : Types::INTEGER; - $tables[$tableName]->addColumn( - $this->quote($fieldName), - $integerType, - [ - 'default' => 0, - 'notnull' => true, - ] - ); - - // Keep the house clean. - unset($items, $allValues, $minValue, $maxValue, $integerType); - } - - // Add fields for all tables, defining link columns (TCA type=link) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'link' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $nullable = $fieldConfig['config']['nullable'] ?? false; - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'length' => 65535, - 'default' => $nullable ? null : '', - 'notnull' => !$nullable, - ] - ); - } - - // Add fields for all tables, defining input columns (TCA type=input) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'input' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $length = $fieldConfig['config']['max'] ?? null; - $nullable = $fieldConfig['config']['nullable'] ?? false; - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'length' => $length ?? 255, - 'default' => '', - 'notnull' => !$nullable, - ] - ); - } + break; - // Add fields for all tables, defining inline columns (TCA type=inline) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'inline' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - if (($fieldConfig['config']['MM'] ?? '') !== '' || ($fieldConfig['config']['foreign_field'] ?? '') !== '') { - // Parent "count" field - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => 0, - 'notnull' => true, - 'unsigned' => true, - ] - ); - } else { - // Inline "csv" - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'default' => '', - 'notnull' => true, - 'length' => 255, - ] - ); - } - if (($fieldConfig['config']['foreign_field'] ?? '') !== '') { - // Add definition for "foreign_field" (contains parent uid) in the child table if it is not defined - // in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql - $childTable = $fieldConfig['config']['foreign_table']; - if (!(($tables[$childTable] ?? null) instanceof Table)) { - throw new DefaultTcaSchemaTablePositionException('Table ' . $childTable . ' not found in schema list', 1527854474); - } - $childTableForeignFieldName = $fieldConfig['config']['foreign_field']; - $childTableForeignFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignFieldName] ?? []; - if (($childTableForeignFieldConfig === [] || ($childTableForeignFieldConfig['config']['type'] ?? '') === 'passthrough') - && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignFieldName) - ) { - $tables[$childTable]->addColumn( - $this->quote($childTableForeignFieldName), + case 'file': + $tables[$tableName]->addColumn( + $this->quote($fieldName), Types::INTEGER, [ 'default' => 0, @@ -969,209 +569,448 @@ class DefaultTcaSchema 'unsigned' => true, ] ); - } - // Add definition for "foreign_table_field" (contains name of parent table) in the child table if it is not - // defined in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql - $childTableForeignTableFieldName = $fieldConfig['config']['foreign_table_field'] ?? ''; - $childTableForeignTableFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignTableFieldName] ?? []; - if ($childTableForeignTableFieldName !== '' - && ($childTableForeignTableFieldConfig === [] || ($childTableForeignTableFieldConfig['config']['type'] ?? '') === 'passthrough') - && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignTableFieldName) - ) { - $tables[$childTable]->addColumn( - $this->quote($childTableForeignTableFieldName), + break; + + case 'folder': + case 'imageManipulation': + case 'flex': + case 'text': + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'notnull' => false, + ] + ); + break; + + case 'email': + $isNullable = (bool)($fieldConfig['config']['nullable'] ?? false); + $tables[$tableName]->addColumn( + $this->quote($fieldName), Types::STRING, [ - 'default' => '', - 'notnull' => true, 'length' => 255, + 'default' => ($isNullable ? null : ''), + 'notnull' => !$isNullable, ] ); - } - } - } + break; - // Add fields for all tables, defining number columns (TCA type=number) - $tableConnectionPlatform = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName)->getDatabasePlatform(); - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'number' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - $type = ($fieldConfig['config']['format'] ?? '') === 'decimal' ? Types::DECIMAL : Types::INTEGER; - $nullable = $fieldConfig['config']['nullable'] ?? false; - $lowerRange = $fieldConfig['config']['range']['lower'] ?? -1; - // Integer type for all database platforms. - if ($type === Types::INTEGER) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'default' => $nullable === true ? null : 0, - 'notnull' => !$nullable, - 'unsigned' => $lowerRange >= 0, - ] - ); - continue; - } - // SQLite internally defines NUMERIC() fields as real, and therefore as floating numbers. pdo_sqlite - // then returns PHP float which can lead to rounding issues. See https://bugs.php.net/bug.php?id=81397 - // for more details. We create a 'string' field on SQLite as workaround. - // @todo Database schema should be created with MySQL in mind and not mixed. Transforming to the - // concrete database platform is handled in the database compare area. Sadly, this is not - // possible right now but upcoming preparation towards doctrine/dbal 4 makes it possible to - // move this "hack" to a different place. - if ($tableConnectionPlatform instanceof DoctrineSQLitePlatform) { - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'default' => $nullable === true ? null : '0.00', - 'notnull' => !$nullable, - 'length' => 255, - ] - ); - continue; - } - // Decimal for all supported platforms except SQLite - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::DECIMAL, - [ - 'default' => $nullable === true ? null : 0.00, - 'notnull' => !$nullable, - 'unsigned' => $lowerRange >= 0, - 'precision' => 10, - 'scale' => 2, - ] - ); - } - // Cleanup - unset($tableConnectionPlatform, $type, $nullable, $lowerRange); + case 'check': + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::SMALLINT, + [ + 'default' => $fieldConfig['config']['default'] ?? 0, + 'notnull' => true, + 'unsigned' => true, + ] + ); + break; - // Add fields for all tables, defining select columns (TCA type=select) - foreach ($tableDefinition['columns'] as $fieldName => $fieldConfig) { - if ((string)($fieldConfig['config']['type'] ?? '') !== 'select' - || $this->isColumnDefinedForTable($tables, $tableName, $fieldName) - ) { - continue; - } - if (($fieldConfig['config']['MM'] ?? '') !== '') { - // MM relation, this is a "parent count" field. Have an int. - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::INTEGER, - [ - 'notnull' => true, - 'default' => 0, - 'unsigned' => true, - ] - ); - continue; - } + case 'language': + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'default' => 0, + 'notnull' => true, + 'unsigned' => false, + ] + ); + break; + + case 'group': + if (isset($fieldConfig['config']['MM'])) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'default' => 0, + 'notnull' => true, + 'unsigned' => true, + ] + ); + } else { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'notnull' => false, + ] + ); + } + break; - $dbFieldLength = (int)($fieldConfig['config']['dbFieldLength'] ?? 0); + case 'password': + if ($fieldConfig['config']['nullable'] ?? false) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'default' => null, + 'notnull' => false, + ] + ); + } else { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'default' => '', + 'notnull' => true, + ] + ); + } + break; - // If itemsProcFunc is not set, check the item values - if (($fieldConfig['config']['itemsProcFunc'] ?? '') === '') { - $items = $fieldConfig['config']['items'] ?? []; - $itemsContainsOnlyIntegers = true; - foreach ($items as $item) { - if (!MathUtility::canBeInterpretedAsInteger($item['value'])) { - $itemsContainsOnlyIntegers = false; - break; + case 'color': + if ($fieldConfig['config']['nullable'] ?? false) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'length' => 7, + 'default' => null, + 'notnull' => false, + ] + ); + } else { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'length' => 7, + 'default' => '', + 'notnull' => true, + ] + ); } - } - $itemsAreAllPositive = true; - foreach ($items as $item) { - if ($item['value'] < 0) { - $itemsAreAllPositive = false; + break; + + case 'radio': + $hasItemsProcFunc = ($fieldConfig['config']['itemsProcFunc'] ?? '') !== ''; + $items = $fieldConfig['config']['items'] ?? []; + // With itemsProcFunc we can't be sure, which values are persisted. Use type string. + if ($hasItemsProcFunc) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'length' => 255, + 'default' => '', + 'notnull' => true, + ] + ); break; } - } - // @todo: The dependency to renderType is unfortunate here. It's only purpose is to potentially have int fields - // instead of string when this is a 'single' relation / value. However, renderType should usually not - // influence DB layer at all. Maybe 'selectSingle' should be changed to an own 'type' instead to make - // this more explicit. Maybe DataHandler could benefit from this as well? - if (($fieldConfig['config']['renderType'] ?? '') === 'selectSingle' || ($fieldConfig['config']['maxitems'] ?? 0) === 1) { - // With 'selectSingle' or with 'maxitems = 1', only a single value can be selected. - if ( - !is_array($fieldConfig['config']['fileFolderConfig'] ?? false) - && ($items !== [] || ($fieldConfig['config']['foreign_table'] ?? '') !== '') - && $itemsContainsOnlyIntegers === true - ) { - // If the item list is empty, or if it contains only int values, an int field is enough. - // Also, the config must not be a 'fileFolderConfig' field which takes string values. + // If no items are configured, use type string to be safe for values added directly. + if ($items === []) { $tables[$tableName]->addColumn( $this->quote($fieldName), - Types::INTEGER, + Types::STRING, [ + 'length' => 255, + 'default' => '', 'notnull' => true, - 'default' => 0, - 'unsigned' => $itemsAreAllPositive, ] ); - continue; + break; + } + // If only one value is NOT an integer use type string. + foreach ($items as $item) { + if (!MathUtility::canBeInterpretedAsInteger($item['value'])) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'length' => 255, + 'default' => '', + 'notnull' => true, + ] + ); + // continue with next $tableDefinition['columns'] + // see: DefaultTcaSchemaTest->enrichAddsRadioStringVerifyThatCorrectLoopIsContinued() + break 2; + } } - // If int is no option, have a string field. + // Use integer type. + $allValues = array_map(fn(array $item): int => (int)$item['value'], $items); + $minValue = min($allValues); + $maxValue = max($allValues); + // Try to safe some bytes - can be reconsidered to simply use Types::INTEGER. + $integerType = ($minValue >= -32768 && $maxValue < 32768) + ? Types::SMALLINT + : Types::INTEGER; $tables[$tableName]->addColumn( $this->quote($fieldName), - Types::STRING, + $integerType, [ + 'default' => 0, 'notnull' => true, - 'default' => '', - 'length' => $dbFieldLength > 0 ? $dbFieldLength : 255, ] ); - continue; - } - if ($itemsContainsOnlyIntegers) { - // Multiple values can be selected and will be stored comma separated. When manual item values are - // all integers, or if there is a foreign_table, we end up with a comma separated list of integers. - // Using string / varchar 255 here should be long enough to store plenty of values, and can be - // changed by setting 'dbFieldLength'. + break; + + case 'link': + $nullable = $fieldConfig['config']['nullable'] ?? false; + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'length' => 65535, + 'default' => $nullable ? null : '', + 'notnull' => !$nullable, + ] + ); + break; + + case 'input': + $length = $fieldConfig['config']['max'] ?? null; + $nullable = $fieldConfig['config']['nullable'] ?? false; $tables[$tableName]->addColumn( $this->quote($fieldName), Types::STRING, [ - // @todo: nullable = true is not a good default here. This stems from the fact that this - // if triggers a lot of TEXT->VARCHAR() field changes during upgrade, where TEXT - // is always nullable, but varchar() is not. As such, we for now declare this - // nullable, but could have a look at it later again when a value upgrade - // for such cases is in place that updates existing null fields to empty string. - 'notnull' => false, + 'length' => $length ?? 255, 'default' => '', - 'length' => $dbFieldLength > 0 ? $dbFieldLength : 255, + 'notnull' => !$nullable, ] ); - continue; - } - } + break; - if ($dbFieldLength > 0) { - // If nothing else matches, but there is a dbFieldLength set, have varchar with that length. - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::STRING, - [ - 'notnull' => true, - 'default' => '', - 'length' => $dbFieldLength, - ] - ); - } else { - // Final fallback creates a (nullable) text field. - $tables[$tableName]->addColumn( - $this->quote($fieldName), - Types::TEXT, - [ - 'notnull' => false, - ] - ); + case 'inline': + if (($fieldConfig['config']['MM'] ?? '') !== '' || ($fieldConfig['config']['foreign_field'] ?? '') !== '') { + // Parent "count" field + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'default' => 0, + 'notnull' => true, + 'unsigned' => true, + ] + ); + } else { + // Inline "csv" + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'default' => '', + 'notnull' => true, + 'length' => 255, + ] + ); + } + if (($fieldConfig['config']['foreign_field'] ?? '') !== '') { + // Add definition for "foreign_field" (contains parent uid) in the child table if it is not defined + // in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql + $childTable = $fieldConfig['config']['foreign_table']; + if (!(($tables[$childTable] ?? null) instanceof Table)) { + throw new DefaultTcaSchemaTablePositionException('Table ' . $childTable . ' not found in schema list', 1527854474); + } + $childTableForeignFieldName = $fieldConfig['config']['foreign_field']; + $childTableForeignFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignFieldName] ?? []; + if (($childTableForeignFieldConfig === [] || ($childTableForeignFieldConfig['config']['type'] ?? '') === 'passthrough') + && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignFieldName) + ) { + $tables[$childTable]->addColumn( + $this->quote($childTableForeignFieldName), + Types::INTEGER, + [ + 'default' => 0, + 'notnull' => true, + 'unsigned' => true, + ] + ); + } + // Add definition for "foreign_table_field" (contains name of parent table) in the child table if it is not + // defined in child TCA or if it is "just" a "passthrough" field, and not manually configured in ext_tables.sql + $childTableForeignTableFieldName = $fieldConfig['config']['foreign_table_field'] ?? ''; + $childTableForeignTableFieldConfig = $GLOBALS['TCA'][$childTable]['columns'][$childTableForeignTableFieldName] ?? []; + if ($childTableForeignTableFieldName !== '' + && ($childTableForeignTableFieldConfig === [] || ($childTableForeignTableFieldConfig['config']['type'] ?? '') === 'passthrough') + && !$this->isColumnDefinedForTable($tables, $childTable, $childTableForeignTableFieldName) + ) { + $tables[$childTable]->addColumn( + $this->quote($childTableForeignTableFieldName), + Types::STRING, + [ + 'default' => '', + 'notnull' => true, + 'length' => 255, + ] + ); + } + } + break; + + case 'number': + $type = ($fieldConfig['config']['format'] ?? '') === 'decimal' ? Types::DECIMAL : Types::INTEGER; + $nullable = $fieldConfig['config']['nullable'] ?? false; + $lowerRange = $fieldConfig['config']['range']['lower'] ?? -1; + // Integer type for all database platforms. + if ($type === Types::INTEGER) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'default' => $nullable === true ? null : 0, + 'notnull' => !$nullable, + 'unsigned' => $lowerRange >= 0, + ] + ); + break; + } + // SQLite internally defines NUMERIC() fields as real, and therefore as floating numbers. pdo_sqlite + // then returns PHP float which can lead to rounding issues. See https://bugs.php.net/bug.php?id=81397 + // for more details. We create a 'string' field on SQLite as workaround. + // @todo: Database schema should be created with MySQL in mind and not mixed. Transforming to the + // concrete database platform is handled in the database compare area. Sadly, this is not + // possible right now but upcoming preparation towards doctrine/dbal 4 makes it possible to + // move this "hack" to a different place. + if ($tableConnectionPlatform instanceof DoctrineSQLitePlatform) { + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'default' => $nullable === true ? null : '0.00', + 'notnull' => !$nullable, + 'length' => 255, + ] + ); + break; + } + // Decimal for all supported platforms except SQLite + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::DECIMAL, + [ + 'default' => $nullable === true ? null : 0.00, + 'notnull' => !$nullable, + 'unsigned' => $lowerRange >= 0, + 'precision' => 10, + 'scale' => 2, + ] + ); + break; + + case 'select': + if (($fieldConfig['config']['MM'] ?? '') !== '') { + // MM relation, this is a "parent count" field. Have an int. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'notnull' => true, + 'default' => 0, + 'unsigned' => true, + ] + ); + break; + } + $dbFieldLength = (int)($fieldConfig['config']['dbFieldLength'] ?? 0); + // If itemsProcFunc is not set, check the item values + if (($fieldConfig['config']['itemsProcFunc'] ?? '') === '') { + $items = $fieldConfig['config']['items'] ?? []; + $itemsContainsOnlyIntegers = true; + foreach ($items as $item) { + if (!MathUtility::canBeInterpretedAsInteger($item['value'])) { + $itemsContainsOnlyIntegers = false; + break; + } + } + $itemsAreAllPositive = true; + foreach ($items as $item) { + if ($item['value'] < 0) { + $itemsAreAllPositive = false; + break; + } + } + // @todo: The dependency to renderType is unfortunate here. It's only purpose is to potentially have int fields + // instead of string when this is a 'single' relation / value. However, renderType should usually not + // influence DB layer at all. Maybe 'selectSingle' should be changed to an own 'type' instead to make + // this more explicit. Maybe DataHandler could benefit from this as well? + if (($fieldConfig['config']['renderType'] ?? '') === 'selectSingle' || ($fieldConfig['config']['maxitems'] ?? 0) === 1) { + // With 'selectSingle' or with 'maxitems = 1', only a single value can be selected. + if ( + !is_array($fieldConfig['config']['fileFolderConfig'] ?? false) + && ($items !== [] || ($fieldConfig['config']['foreign_table'] ?? '') !== '') + && $itemsContainsOnlyIntegers === true + ) { + // If the item list is empty, or if it contains only int values, an int field is enough. + // Also, the config must not be a 'fileFolderConfig' field which takes string values. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::INTEGER, + [ + 'notnull' => true, + 'default' => 0, + 'unsigned' => $itemsAreAllPositive, + ] + ); + break; + } + // If int is no option, have a string field. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'notnull' => true, + 'default' => '', + 'length' => $dbFieldLength > 0 ? $dbFieldLength : 255, + ] + ); + break; + } + if ($itemsContainsOnlyIntegers) { + // Multiple values can be selected and will be stored comma separated. When manual item values are + // all integers, or if there is a foreign_table, we end up with a comma separated list of integers. + // Using string / varchar 255 here should be long enough to store plenty of values, and can be + // changed by setting 'dbFieldLength'. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + // @todo: nullable = true is not a good default here. This stems from the fact that this + // if triggers a lot of TEXT->VARCHAR() field changes during upgrade, where TEXT + // is always nullable, but varchar() is not. As such, we for now declare this + // nullable, but could have a look at it later again when a value upgrade + // for such cases is in place that updates existing null fields to empty string. + 'notnull' => false, + 'default' => '', + 'length' => $dbFieldLength > 0 ? $dbFieldLength : 255, + ] + ); + break; + } + } + if ($dbFieldLength > 0) { + // If nothing else matches, but there is a dbFieldLength set, have varchar with that length. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::STRING, + [ + 'notnull' => true, + 'default' => '', + 'length' => $dbFieldLength, + ] + ); + } else { + // Final fallback creates a (nullable) text field. + $tables[$tableName]->addColumn( + $this->quote($fieldName), + Types::TEXT, + [ + 'notnull' => false, + ] + ); + } + break; } } - } return $tables; diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php index 070a2ccf675b..75d2277c5da6 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsByUpdateWithDiff.php @@ -174,9 +174,9 @@ return [ 'updateMode' => sprintf('<select class="form-select form-select-sm" name="tx_impexp[import_mode][tt_content:1]" style="width: 100px"><option value="0">Update</option><option value="%s">Import as new</option><option value="%s">Ignore PID</option><option value="%s">Exclude</option></select>', \TYPO3\CMS\Impexp\Import::IMPORT_MODE_AS_NEW, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_IGNORE_PID, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_EXCLUDE), 'showDiffContent' => '<strong class="text-nowrap">[tt_content:1 => 2]:</strong> <table class="table table-striped table-hover"> -<tr><td>Images (image)</td><td>N/A</td></tr> -<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr> <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>& Images</del><ins>Element</ins></td></tr> +<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr> +<tr><td>Images (image)</td><td>N/A</td></tr> </table>', 'controls' => '', 'message' => '', @@ -243,9 +243,9 @@ return [ 'updateMode' => sprintf('<select class="form-select form-select-sm" name="tx_impexp[import_mode][tt_content:2]" style="width: 100px"><option value="0">Update</option><option value="%s">Import as new</option><option value="%s">Ignore PID</option><option value="%s">Exclude</option></select>', \TYPO3\CMS\Impexp\Import::IMPORT_MODE_AS_NEW, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_IGNORE_PID, \TYPO3\CMS\Impexp\Import::IMPORT_MODE_EXCLUDE), 'showDiffContent' => '<strong class="text-nowrap">[tt_content:2 => 1]:</strong>' . "\n" . '<table class="table table-striped table-hover">' . "\n" - . '<tr><td>Images (image)</td><td>N/A</td></tr>' . "\n" - . '<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>' . "\n" . '<tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>& Images</del><ins>Element</ins></td></tr>' . "\n" + . '<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr>' . "\n" + . '<tr><td>Images (image)</td><td>N/A</td></tr>' . "\n" . '</table>', 'controls' => '', 'message' => '', diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php index ccb1b18bbdb7..3afa38a1ddbe 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/ArrayAssertions/RenderPreviewImportPageAndRecordsWithDiff.php @@ -137,9 +137,9 @@ return [ 'active' => 'active', 'showDiffContent' => '<strong class="text-nowrap">[tt_content:1 => 2]:</strong> <table class="table table-striped table-hover"> -<tr><td>Images (image)</td><td>N/A</td></tr> -<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr> <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>& Images</del><ins>Element</ins></td></tr> +<tr><td>Header (header)</td><td><del>CE 1 first image</del><ins>Test content</ins></td></tr> +<tr><td>Images (image)</td><td>N/A</td></tr> </table>', 'controls' => '', 'message' => '', @@ -204,9 +204,9 @@ return [ 'active' => 'active', 'showDiffContent' => '<strong class="text-nowrap">[tt_content:2 => 1]:</strong> <table class="table table-striped table-hover"> -<tr><td>Images (image)</td><td>N/A</td></tr> -<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr> <tr><td>Type (CType)</td><td><ins>Regular </ins>Text <del>& Images</del><ins>Element</ins></td></tr> +<tr><td>Header (header)</td><td><del>CE 2 second image</del><ins>Test content 2</ins></td></tr> +<tr><td>Images (image)</td><td>N/A</td></tr> </table>', 'controls' => '', 'message' => '', diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml index 31fb9b44dfde..2a94134b5394 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/irre-records.xml @@ -710,8 +710,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">IRRE</field> <field index="doktype" type="integer">1</field> + <field index="title">IRRE</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -722,10 +722,10 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> + <field index="CType">text</field> <field index="header">Test content</field> <field index="tx_testirrecsv_hotels">1,2</field> <field index="tx_testirreforeignfield_hotels" type="integer">2</field> - <field index="CType">text</field> </fieldlist> <related index="rels" type="array"> <field index="tx_testirrecsv_hotels" type="array"> @@ -1282,8 +1282,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">223.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1297,8 +1297,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price 1.2.2 (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">567.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1312,8 +1312,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price 1.1.1 (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">567.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1355,9 +1355,9 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">2</field> <field index="offersort" type="integer">1</field> - <field index="prices" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">2</field> + <field index="prices" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1399,9 +1399,9 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">1</field> - <field index="prices" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">1</field> + <field index="prices" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1569,10 +1569,10 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">0</field> - <field index="allincl" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">1</field> <field index="quality" type="integer">2</field> + <field index="allincl" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1605,10 +1605,10 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">0</field> - <field index="allincl" type="integer">0</field> <field index="hotelid" type="integer">2</field> <field index="offerid" type="integer">2</field> <field index="quality" type="integer">4</field> + <field index="allincl" type="integer">0</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml index 684bcfcda8a4..243c01f2b3b1 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-complex.xml @@ -111,8 +111,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -123,9 +123,9 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="header_link">file:2</field> - <field index="header">Test content</field> <field index="CType">text</field> + <field index="header">Test content</field> + <field index="header_link">file:2</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -155,9 +155,9 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="header_link">file:4</field> - <field index="header">Test content 2</field> <field index="CType">text</field> + <field index="header">Test content 2</field> + <field index="header_link">file:4</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -190,11 +190,11 @@ <field index="sha1">e873c1e2ffd0f191e183a1057de3eef4d62e782d</field> <field index="creation_date">1393346082</field> <field index="modification_date">1392907534</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">5565</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">5565</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml index 97889a067dfa..47e54a7d83b5 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-onlysingle.xml @@ -68,8 +68,8 @@ <field index="l10n_parent" type="integer">5</field> <field index="l10n_source" type="integer">5</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> @@ -101,8 +101,8 @@ <field index="sys_language_uid" type="integer">1</field> <field index="l18n_parent" type="integer">3</field> <field index="l10n_source" type="integer">3</field> - <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> <field index="CType">text</field> + <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> </fieldlist> <related index="rels" type="array"> <field index="l18n_parent" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml index 4fa71e3b4615..54844923409f 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual-single.xml @@ -86,8 +86,8 @@ <field index="l10n_parent" type="integer">5</field> <field index="l10n_source" type="integer">5</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> @@ -119,8 +119,8 @@ <field index="sys_language_uid" type="integer">1</field> <field index="l18n_parent" type="integer">3</field> <field index="l10n_source" type="integer">3</field> - <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> <field index="CType">text</field> + <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> </fieldlist> <related index="rels" type="array"> <field index="l18n_parent" type="array"> @@ -154,8 +154,8 @@ <field index="l10n_parent">0</field> <field index="l10n_source">0</field> <field index="perms_everybody">15</field> - <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field> - <field index="doktype">1</field> + <field index="doktype">1</field> + <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -168,8 +168,8 @@ <field index="sys_language_uid">0</field> <field index="l18n_parent">0</field> <field index="l10n_source">0</field> - <field index="header">Test content #3 pid=5 'Dummy with 3 languages, fully translated' (default language=0)</field> <field index="CType">text</field> + <field index="header">Test content #3 pid=5 'Dummy with 3 languages, fully translated' (default language=0)</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml index 6db64ba4423a..a076f2f84e85 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-multilingual.xml @@ -253,8 +253,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -269,8 +269,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, two translations [DEFAULT]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, two translations [DEFAULT]</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -285,8 +285,8 @@ <field index="l10n_parent" type="integer">7</field> <field index="l10n_source" type="integer">7</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, two languages [GERMAN]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, two languages [GERMAN]</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> @@ -318,8 +318,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> - <field index="header">Test content #2 pid=7 'Dummy with 3 languages, two translations' (default language=0)</field> <field index="CType">text</field> + <field index="header">Test content #2 pid=7 'Dummy with 3 languages, two translations' (default language=0)</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -332,8 +332,8 @@ <field index="sys_language_uid" type="integer">1</field> <field index="l18n_parent" type="integer">2</field> <field index="l10n_source" type="integer">2</field> - <field index="header">Test content #7 pid=7 'Dummy with 3 languages, two translations' (german=1)</field> <field index="CType">text</field> + <field index="header">Test content #7 pid=7 'Dummy with 3 languages, two translations' (german=1)</field> </fieldlist> <related index="rels" type="array"> <field index="l18n_parent" type="array"> @@ -367,8 +367,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, only default content [DEFAULT]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, only default content [DEFAULT]</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -381,8 +381,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> - <field index="header">Test content #6 pid=6 'Dummy with 3 languages, only default content' (default language=0)</field> <field index="CType">text</field> + <field index="header">Test content #6 pid=6 'Dummy with 3 languages, only default content' (default language=0)</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -397,8 +397,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, fully translated [DEFAULT]</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -413,8 +413,8 @@ <field index="l10n_parent" type="integer">5</field> <field index="l10n_source" type="integer">5</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, fully translated [GERMAN]</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> @@ -448,8 +448,8 @@ <field index="l10n_parent" type="integer">5</field> <field index="l10n_source" type="integer">5</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, fully translated [FRENCH]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, fully translated [FRENCH]</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> @@ -481,8 +481,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> - <field index="header">Test content #3 pid=5 'Dummy with 3 languages, fully translated' (default language=0)</field> <field index="CType">text</field> + <field index="header">Test content #3 pid=5 'Dummy with 3 languages, fully translated' (default language=0)</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -495,8 +495,8 @@ <field index="sys_language_uid" type="integer">1</field> <field index="l18n_parent" type="integer">3</field> <field index="l10n_source" type="integer">3</field> - <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> <field index="CType">text</field> + <field index="header">Test content #4 pid=5 'Dummy with 3 languages, fully translated' (german=1)</field> </fieldlist> <related index="rels" type="array"> <field index="l18n_parent" type="array"> @@ -528,8 +528,8 @@ <field index="sys_language_uid" type="integer">2</field> <field index="l18n_parent" type="integer">3</field> <field index="l10n_source" type="integer">3</field> - <field index="header">Test content #5 pid=5 'Dummy with 3 languages, fully translated' (french=2)</field> <field index="CType">text</field> + <field index="header">Test content #5 pid=5 'Dummy with 3 languages, fully translated' (french=2)</field> </fieldlist> <related index="rels" type="array"> <field index="l18n_parent" type="array"> @@ -563,8 +563,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy with 3 languages, no content [DEFAULT]</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy with 3 languages, no content [DEFAULT]</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -579,8 +579,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy only default language</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy only default language</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -593,8 +593,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> - <field index="header">Test content #1 pid=3 'Dummy only default language' (default language=0)</field> <field index="CType">text</field> + <field index="header">Test content #1 pid=3 'Dummy only default language' (default language=0)</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -609,8 +609,8 @@ <field index="l10n_parent" type="integer">0</field> <field index="l10n_source" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy no content</field> - <field index="doktype" type="integer">1</field> + <field index="doktype" type="integer">1</field> + <field index="title">Dummy no content</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml index af2513faafd0..a0adad691fbb 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-corrupt-image.xml @@ -195,8 +195,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -207,12 +207,12 @@ <field index="uid_local" type="integer">1</field> <field index="title" type="NULL"></field> <field index="alternative" type="NULL"></field> - <field index="description" type="NULL"></field> - <field index="link"/> + <field index="uid_foreign" type="integer">1</field> <field index="tablenames">tt_content</field> <field index="fieldname">image</field> - <field index="uid_foreign" type="integer">1</field> <field index="sorting_foreign" type="integer">0</field> + <field index="link"/> + <field index="description" type="NULL"></field> </fieldlist> <related index="rels" type="array"> <field index="uid_local" type="array"> @@ -233,10 +233,10 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="image" type="integer">1</field> - <field index="header_link">file:1</field> - <field index="header">Test content</field> <field index="CType">textpic</field> + <field index="header">Test content</field> + <field index="header_link">file:1</field> + <field index="image" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -275,8 +275,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -287,8 +287,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -303,11 +303,11 @@ <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field> <field index="creation_date">1389878273</field> <field index="modification_date">1389878273</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">1958</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">1958</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> @@ -340,10 +340,12 @@ <field index="pid">0</field> <field index="description" type="NULL"></field> <field index="is_public">1</field> + <field index="name">fileadmin</field> <field index="is_browsable">1</field> <field index="is_default">0</field> <field index="is_writable">1</field> <field index="is_online">1</field> + <field index="driver">Local</field> <field index="configuration"><?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3FlexForms> <data> @@ -362,8 +364,6 @@ </sheet> </data> </T3FlexForms></field> - <field index="name">fileadmin</field> - <field index="driver">Local</field> </fieldlist> <related index="rels" type="array"/> </tablerow> @@ -375,10 +375,10 @@ <field index="l10n_parent">0</field> <field index="title">Dummy image</field> <field index="alternative">Photo of program code</field> + <field index="file">1</field> <field index="description">This is a dummy image.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="file" type="array"> @@ -400,10 +400,10 @@ <field index="l10n_parent">1</field> <field index="title">Beispiel Bild</field> <field index="alternative">Foto von Programmcode</field> + <field index="file">1</field> <field index="description">Nur ein Beispielbild.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml index 211263bf1d2d..4c9434a5fc25 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-relation.xml @@ -85,8 +85,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -97,11 +97,11 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="flexFormRelation"><value index="vDEF">1</value></field></language></sheet></data></T3FlexForms></field> - <field index="header_link"></field> - <field index="header">Test content</field> <field index="CType">text</field> + <field index="header">Test content</field> + <field index="header_link"></field> <field index="list_type"></field> + <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="flexFormRelation"><value index="vDEF">1</value></field></language></sheet></data></T3FlexForms></field> </fieldlist> <related index="rels" type="array"> <field index="pi_flexform" type="array"> @@ -126,8 +126,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -138,8 +138,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml index 438d07a89186..5c27503507b0 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-flexform-softrefs.xml @@ -117,8 +117,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -129,11 +129,11 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="settings.persistenceIdentifier"><value index="vDEF">1:/form_definitions/flexFormWithSoftReference.form.yaml</value></field></language></sheet></data></T3FlexForms></field> - <field index="header_link"></field> - <field index="header">Test content</field> <field index="CType">form_formframework</field> + <field index="header">Test content</field> + <field index="header_link"></field> <field index="list_type"></field> + <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="settings.persistenceIdentifier"><value index="vDEF">1:/form_definitions/flexFormWithSoftReference.form.yaml</value></field></language></sheet></data></T3FlexForms></field> </fieldlist> <related index="rels" type="array"> <field index="pi_flexform" type="array"> @@ -168,8 +168,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -180,8 +180,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -196,11 +196,11 @@ <field index="sha1">4acd754cee5861bb543870fae76df5d35c0a0e5b</field> <field index="creation_date">1628060459</field> <field index="modification_date">1628060459</field> - <field index="mime_type">text/plain</field> - <field index="metadata">0</field> - <field index="size">501</field> <field index="storage">1</field> <field index="type">1</field> + <field index="mime_type">text/plain</field> + <field index="size">501</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml index ef981ed2c840..74c1241f1747 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image-but-not-included.xml @@ -195,8 +195,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -207,12 +207,12 @@ <field index="uid_local" type="integer">1</field> <field index="title" type="NULL"></field> <field index="alternative" type="NULL"></field> - <field index="description" type="NULL"></field> - <field index="link"/> + <field index="uid_foreign" type="integer">1</field> <field index="tablenames">tt_content</field> <field index="fieldname">image</field> - <field index="uid_foreign" type="integer">1</field> <field index="sorting_foreign" type="integer">0</field> + <field index="link"/> + <field index="description" type="NULL"></field> </fieldlist> <related index="rels" type="array"> <field index="uid_local" type="array"> @@ -233,10 +233,10 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="image" type="integer">1</field> - <field index="header_link">file:1</field> - <field index="header">Test content</field> <field index="CType">textpic</field> + <field index="header">Test content</field> + <field index="header_link">file:1</field> + <field index="image" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -275,8 +275,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -287,8 +287,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -303,11 +303,11 @@ <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field> <field index="creation_date">1389878273</field> <field index="modification_date">1389878273</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">7958</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">7958</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> @@ -340,10 +340,12 @@ <field index="pid">0</field> <field index="description" type="NULL"></field> <field index="is_public">1</field> + <field index="name">fileadmin</field> <field index="is_browsable">1</field> <field index="is_default">0</field> <field index="is_writable">1</field> <field index="is_online">1</field> + <field index="driver">Local</field> <field index="configuration"><?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3FlexForms> <data> @@ -362,8 +364,6 @@ </sheet> </data> </T3FlexForms></field> - <field index="name">fileadmin</field> - <field index="driver">Local</field> </fieldlist> <related index="rels" type="array"/> </tablerow> @@ -375,10 +375,10 @@ <field index="l10n_parent">0</field> <field index="title">Dummy image</field> <field index="alternative">Photo of program code</field> + <field index="file">1</field> <field index="description">This is a dummy image.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="file" type="array"> @@ -400,10 +400,10 @@ <field index="l10n_parent">1</field> <field index="title">Beispiel Bild</field> <field index="alternative">Foto von Programmcode</field> + <field index="file">1</field> <field index="description">Nur ein Beispielbild.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml index a81bd2c0db18..a337b36c0d0f 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-image.xml @@ -195,8 +195,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -207,12 +207,12 @@ <field index="uid_local" type="integer">1</field> <field index="title" type="NULL"></field> <field index="alternative" type="NULL"></field> - <field index="description" type="NULL"></field> - <field index="link"/> + <field index="uid_foreign" type="integer">1</field> <field index="tablenames">tt_content</field> <field index="fieldname">image</field> - <field index="uid_foreign" type="integer">1</field> <field index="sorting_foreign" type="integer">0</field> + <field index="link"/> + <field index="description" type="NULL"></field> </fieldlist> <related index="rels" type="array"> <field index="uid_local" type="array"> @@ -233,10 +233,10 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="image" type="integer">1</field> - <field index="header_link">file:1</field> - <field index="header">Test content</field> <field index="CType">textpic</field> + <field index="header">Test content</field> + <field index="header_link">file:1</field> + <field index="image" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -275,8 +275,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -287,8 +287,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -303,11 +303,11 @@ <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field> <field index="creation_date">1389878273</field> <field index="modification_date">1389878273</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">7958</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">7958</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> @@ -340,10 +340,12 @@ <field index="pid">0</field> <field index="description" type="NULL"></field> <field index="is_public">1</field> + <field index="name">fileadmin</field> <field index="is_browsable">1</field> <field index="is_default">0</field> <field index="is_writable">1</field> <field index="is_online">1</field> + <field index="driver">Local</field> <field index="configuration"><?xml version="1.0" encoding="utf-8" standalone="yes" ?> <T3FlexForms> <data> @@ -362,8 +364,6 @@ </sheet> </data> </T3FlexForms></field> - <field index="name">fileadmin</field> - <field index="driver">Local</field> </fieldlist> <related index="rels" type="array"/> </tablerow> @@ -375,10 +375,10 @@ <field index="l10n_parent">0</field> <field index="title">Dummy image</field> <field index="alternative">Photo of program code</field> + <field index="file">1</field> <field index="description">This is a dummy image.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="file" type="array"> @@ -400,10 +400,10 @@ <field index="l10n_parent">1</field> <field index="title">Beispiel Bild</field> <field index="alternative">Foto von Programmcode</field> + <field index="file">1</field> <field index="description">Nur ein Beispielbild.</field> <field index="width">400</field> <field index="height">300</field> - <field index="file">1</field> </fieldlist> <related index="rels" type="array"> <field index="l10n_parent" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml index a3556f22bc23..0a5a17fa6415 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent-with-softrefs.xml @@ -128,8 +128,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -140,11 +140,11 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="softrefLink"><value index="vDEF">t3://page?uid=2</value></field></language></sheet></data></T3FlexForms></field> - <field index="header_link">file:1</field> - <field index="header">Test content</field> <field index="CType">text</field> + <field index="header">Test content</field> + <field index="header_link">file:1</field> <field index="list_type"></field> + <field index="pi_flexform"><?xml version="1.0" encoding="utf-8" standalone="yes" ?><T3FlexForms><data><sheet index="sDEF"><language index="lDEF"><field index="softrefLink"><value index="vDEF">t3://page?uid=2</value></field></language></sheet></data></T3FlexForms></field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -197,8 +197,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -209,8 +209,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -225,11 +225,11 @@ <field index="sha1">da9acdf1e105784a57bbffec9520969578287797</field> <field index="creation_date">1389878273</field> <field index="modification_date">1389878273</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">7958</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">7958</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml index 26dfb9158e33..2b60a3c1ed5c 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlExports/pages-and-ttcontent.xml @@ -173,8 +173,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Root</field> <field index="doktype" type="integer">1</field> + <field index="title">Root</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -185,9 +185,9 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="header_link">file:2</field> - <field index="header">Test content</field> <field index="CType">text</field> + <field index="header">Test content</field> + <field index="header_link">file:2</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -217,9 +217,9 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> - <field index="header_link">file:4</field> - <field index="header">Test content 2</field> <field index="CType">text</field> + <field index="header">Test content 2</field> + <field index="header_link">file:4</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -248,9 +248,9 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="t3ver_oid" type="integer">0</field> - <field index="header_link">file:3</field> - <field index="header">Test content 3</field> <field index="CType">text</field> + <field index="header">Test content 3</field> + <field index="header_link">file:3</field> </fieldlist> <related index="rels" type="array"> <field index="header_link" type="array"> @@ -280,8 +280,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">1</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-3</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-3</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -292,8 +292,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">Dummy 1-2</field> <field index="doktype" type="integer">1</field> + <field index="title">Dummy 1-2</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -308,11 +308,11 @@ <field index="sha1">e873c1e2ffd0f191e183a1057de3eef4d62e782d</field> <field index="creation_date">1393346082</field> <field index="modification_date">1392907534</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">5565</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">5565</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> @@ -337,11 +337,11 @@ <field index="sha1">c3511df85d21bc578faf71c6a19eeb3ff44af370</field> <field index="creation_date">1393432184</field> <field index="modification_date">1393432183</field> - <field index="mime_type">image/jpeg</field> - <field index="metadata">0</field> - <field index="size">7425</field> <field index="storage">1</field> <field index="type">2</field> + <field index="mime_type">image/jpeg</field> + <field index="size">7425</field> + <field index="metadata">0</field> </fieldlist> <related index="rels" type="array"> <field index="storage" type="array"> diff --git a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml index 59a32c963756..67a8f386452a 100644 --- a/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml +++ b/typo3/sysext/impexp/Tests/Functional/Fixtures/XmlImports/irre-records.xml @@ -710,8 +710,8 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="perms_everybody" type="integer">15</field> - <field index="title">IRRE</field> <field index="doktype" type="integer">1</field> + <field index="title">IRRE</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -722,10 +722,10 @@ <field index="deleted" type="integer">0</field> <field index="hidden" type="integer">0</field> <field index="t3ver_oid" type="integer">0</field> + <field index="CType">text</field> <field index="header">Test content</field> <field index="tx_testirrecsv_hotels">1,2</field> <field index="tx_testirreforeignfield_hotels" type="integer">2</field> - <field index="CType">text</field> </fieldlist> <related index="rels" type="array"> <field index="tx_testirrecsv_hotels" type="array"> @@ -1282,8 +1282,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">223.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1297,8 +1297,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price 1.2.2 (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">567.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1312,8 +1312,8 @@ <field index="sys_language_uid" type="integer">0</field> <field index="l18n_parent" type="integer">0</field> <field index="title">Price 1.1.1 (m:n (MM) ASym)</field> - <field index="offers" type="integer">0</field> <field index="price">567.00</field> + <field index="offers" type="integer">0</field> </fieldlist> <related index="rels" type="array"></related> </tablerow> @@ -1355,9 +1355,9 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">2</field> <field index="offersort" type="integer">1</field> - <field index="prices" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">2</field> + <field index="prices" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1399,9 +1399,9 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">1</field> - <field index="prices" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">1</field> + <field index="prices" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1569,10 +1569,10 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">1</field> - <field index="allincl" type="integer">1</field> <field index="hotelid" type="integer">1</field> <field index="offerid" type="integer">1</field> <field index="quality" type="integer">2</field> + <field index="allincl" type="integer">1</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> @@ -1605,10 +1605,10 @@ <field index="l18n_parent" type="integer">0</field> <field index="hotelsort" type="integer">1</field> <field index="offersort" type="integer">1</field> - <field index="allincl" type="integer">0</field> <field index="hotelid" type="integer">2</field> <field index="offerid" type="integer">2</field> <field index="quality" type="integer">4</field> + <field index="allincl" type="integer">0</field> </fieldlist> <related index="rels" type="array"> <field index="hotelid" type="array"> -- GitLab