2 namespace TYPO3\CMS\Core\Migrations;
78 foreach ($tca as $table => $tableDefinition) {
79 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
82 foreach ($tableDefinition[
'columns'] as $fieldName => $fieldConfig) {
84 !empty($fieldConfig[
'config'][
'type'])
85 && trim($fieldConfig[
'config'][
'type']) ===
'text'
86 && isset($fieldConfig[
'config'][
'wizards'])
87 && is_array($fieldConfig[
'config'][
'wizards'])
89 foreach ($fieldConfig[
'config'][
'wizards'] as $wizardName => $wizardConfig) {
91 !empty($wizardConfig[
'userFunc'])
92 && trim($wizardConfig[
'userFunc']) ===
'TYPO3\\CMS\\T3editor\\FormWizard->main'
94 !isset($wizardConfig[
'enableByTypeConfig'])
95 || (isset($wizardConfig[
'enableByTypeConfig']) && !$wizardConfig[
'enableByTypeConfig'])
99 $newTca[$table][
'columns'][$fieldName][
'config'][
'renderType'] =
't3editor';
101 unset($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards'][$wizardName]);
103 if (!empty($wizardConfig[
'params'][
'format'])) {
104 $newTca[$table][
'columns'][$fieldName][
'config'][
'format'] = $wizardConfig[
'params'][
'format'];
106 $this->messages[] =
'Migrated t3editor wizard in TCA of table "' . $table .
'" field "' . $fieldName .
'" to a renderType definition.';
110 if (empty($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards'])) {
111 unset($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards']);
129 foreach ($tca as $table => $tableDefinition) {
130 if (!isset($tableDefinition[
'types']) || !is_array($tableDefinition[
'types'])) {
133 foreach ($tableDefinition[
'types'] as $typeName => $typeArray) {
134 if (!is_string($typeArray[
'showitem']) || strpos($typeArray[
'showitem'],
';') ===
false) {
139 $newFieldStrings = array();
140 foreach ($itemList as $fieldString) {
141 $fieldString = rtrim($fieldString,
';');
146 'fieldName' => isset($fieldArray[0]) ? $fieldArray[0] :
'',
147 'fieldLabel' => isset($fieldArray[1]) ? $fieldArray[1] : null,
148 'paletteName' => isset($fieldArray[2]) ? $fieldArray[2] : null,
149 'fieldExtra' => isset($fieldArray[3]) ? $fieldArray[3] : null,
151 $fieldName = $fieldArray[
'fieldName'];
152 if (!empty($fieldArray[
'fieldExtra'])) {
154 if (!isset($newTca[$table][
'types'][$typeName][
'columnsOverrides'])) {
155 $newTca[$table][
'types'][$typeName][
'columnsOverrides'] = array();
157 if (!isset($newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldArray[
'fieldName']])) {
158 $newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldArray[
'fieldName']] = array();
163 $newDefaultExtras = array();
164 if (!empty($tca[$table][
'columns'][$fieldArray[
'fieldName']][
'defaultExtras'])) {
165 $newDefaultExtras[] = $tca[$table][
'columns'][$fieldArray[
'fieldName']][
'defaultExtras'];
167 $newDefaultExtras[] = $fieldArray[
'fieldExtra'];
168 $newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldArray[
'fieldName']][
'defaultExtras'] = implode(
':', $newDefaultExtras);
170 unset($fieldArray[
'fieldExtra']);
171 if (count($fieldArray) === 3 && empty($fieldArray[
'paletteName'])) {
172 unset($fieldArray[
'paletteName']);
174 if (count($fieldArray) === 2 && empty($fieldArray[
'fieldLabel'])) {
175 unset($fieldArray[
'fieldLabel']);
177 if (count($fieldArray) === 1 && empty($fieldArray[
'fieldName'])) {
179 unset($fieldArray[
'fieldName']);
181 $newFieldString = implode(
';', $fieldArray);
182 if ($newFieldString !== $fieldString) {
183 $this->messages[] =
'Changed showitem string of TCA table "' . $table .
'" type "' . $typeName .
'" due to changed field "' . $fieldName .
'".';
185 if (!empty($newFieldString)) {
186 $newFieldStrings[] = $newFieldString;
189 $newTca[$table][
'types'][$typeName][
'showitem'] = implode(
',', $newFieldStrings);
205 foreach ($tca as $table => $tableDefinition) {
206 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
209 foreach ($tableDefinition[
'columns'] as $fieldName => $fieldConfig) {
211 !empty($fieldConfig[
'config'][
'type'])
212 && trim($fieldConfig[
'config'][
'type']) ===
'text'
213 && isset($fieldConfig[
'config'][
'wizards'])
214 && is_array($fieldConfig[
'config'][
'wizards'])
216 foreach ($fieldConfig[
'config'][
'wizards'] as $wizardName => $wizardConfig) {
218 !empty($wizardConfig[
'userFunc'])
219 && trim($wizardConfig[
'userFunc']) ===
'TYPO3\CMS\T3editor\FormWizard->main'
220 && !empty($wizardConfig[
'enableByTypeConfig'])
223 unset($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards'][$wizardName]);
225 if (!isset($tableDefinition[
'types']) || !is_array($tableDefinition[
'types'])) {
229 foreach ($tableDefinition[
'types'] as $typeName => $typeArray) {
231 empty($typeArray[
'columnsOverrides'][$fieldName][
'defaultExtras'])
232 || strpos($typeArray[
'columnsOverrides'][$fieldName][
'defaultExtras'], $wizardName) ===
false
237 $defaultExtras = $typeArray[
'columnsOverrides'][$fieldName][
'defaultExtras'];
239 $newDefaultExtrasArray = array();
240 foreach ($defaultExtrasArray as $fieldExtraField) {
242 if (substr($fieldExtraField, 0, 8) ===
'wizards[') {
243 $enabledWizards = substr($fieldExtraField, 8, strlen($fieldExtraField) - 8);
244 $enabledWizards = substr($enabledWizards, 0, strlen($enabledWizards) - 1);
246 $newEnabledWizardsArray = array();
247 foreach ($enabledWizardsArray as $enabledWizardName) {
248 if ($enabledWizardName === $wizardName) {
251 $newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldName][
'config'][
'renderType'] =
't3editor';
253 if (!empty($wizardConfig[
'params'][
'format'])) {
254 $newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldName][
'config'][
'format'] = $wizardConfig[
'params'][
'format'];
256 $this->messages[] =
'Migrated t3editor wizard in TCA of table "' . $table .
'" field "' . $fieldName
257 .
'" to a renderType definition with columnsOverrides in type "' . $typeName .
'".';
260 $newEnabledWizardsArray[] = $enabledWizardName;
263 if (!empty($newEnabledWizardsArray)) {
264 $newDefaultExtrasArray[] =
'wizards[' . implode(
'|', $newEnabledWizardsArray) .
']';
267 $newDefaultExtrasArray[] = $fieldExtraField;
270 if (!empty($newDefaultExtrasArray)) {
271 $newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldName][
'defaultExtras'] = implode(
':', $newDefaultExtrasArray);
273 unset($newTca[$table][
'types'][$typeName][
'columnsOverrides'][$fieldName][
'defaultExtras']);
279 if (empty($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards'])) {
280 unset($newTca[$table][
'columns'][$fieldName][
'config'][
'wizards']);
303 foreach ($tca as $table => $tableDefinition) {
304 if (!isset($tableDefinition[
'types']) || !is_array($tableDefinition[
'types'])) {
307 foreach ($tableDefinition[
'types'] as $typeName => $typeArray) {
309 !isset($typeArray[
'showitem'])
310 || !is_string($typeArray[
'showitem'])
311 || strpos($typeArray[
'showitem'],
';') ===
false
316 $newFieldStrings = array();
317 foreach ($itemList as $fieldString) {
320 'fieldName' => isset($fieldArray[0]) ? $fieldArray[0] :
'',
321 'fieldLabel' => isset($fieldArray[1]) ? $fieldArray[1] : null,
322 'paletteName' => isset($fieldArray[2]) ? $fieldArray[2] : null,
324 if ($fieldArray[
'fieldName'] !==
'--palette--' && $fieldArray[
'paletteName'] !== null) {
325 if ($fieldArray[
'fieldLabel']) {
326 $fieldString = $fieldArray[
'fieldName'] .
';' . $fieldArray[
'fieldLabel'];
328 $fieldString = $fieldArray[
'fieldName'];
330 $paletteString =
'--palette--;;' . $fieldArray[
'paletteName'];
331 $this->messages[] =
'Migrated TCA table "' . $table .
'" showitem field of type "' . $typeName .
'": Moved additional palette'
332 .
' with name "' . $fieldArray[
'paletteName'] .
'" as 3rd argument of field "' . $fieldArray[
'fieldName']
333 .
'" to an own palette. The result of this part is: "' . $fieldString .
', ' . $paletteString .
'"';
334 $newFieldStrings[] = $fieldString;
335 $newFieldStrings[] = $paletteString;
337 $newFieldStrings[] = $fieldString;
340 $newTca[$table][
'types'][$typeName][
'showitem'] = implode(
',', $newFieldStrings);
364 $oldFileNames = array(
374 $newFileLocations = array(
375 'add.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_add.gif',
376 'link_popup.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_link.gif',
377 'wizard_rte2.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_rte.gif',
378 'wizard_table.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_table.gif',
379 'edit2.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_edit.gif',
380 'list.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_list.gif',
381 'wizard_forms.gif' =>
'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_forms.gif',
384 foreach ($tca as $table => $tableDefinition) {
385 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
388 foreach ($tableDefinition[
'columns'] as $fieldName => $fieldConfig) {
390 isset($fieldConfig[
'config'][
'wizards'])
391 && is_array($fieldConfig[
'config'][
'wizards'])
393 foreach ($fieldConfig[
'config'][
'wizards'] as $wizardName => $wizardConfig) {
394 if (!is_array($wizardConfig)) {
398 foreach ($wizardConfig as $option => $value) {
399 if ($option ===
'icon' && in_array($value, $oldFileNames,
true)) {
400 $newTca[$table][
'columns'][$fieldName][
'config'][
'wizards'][$wizardName][
'icon'] = $newFileLocations[$value];
401 $this->messages[] =
'Migrated icon path of wizard "' . $wizardName .
'" in field "' . $fieldName .
'" from TCA table "' . $table .
'". New path is: ' . $newFileLocations[$value];
420 foreach ($tca as $table => &$tableDefinition) {
421 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
424 foreach ($tableDefinition[
'columns'] as $fieldName => &$fieldConfig) {
426 !empty($fieldConfig[
'config'][
'type'])
427 && trim($fieldConfig[
'config'][
'type']) ===
'select'
428 && isset($fieldConfig[
'config'][
'items'])
429 && is_array($fieldConfig[
'config'][
'items'])
431 foreach ($fieldConfig[
'config'][
'items'] as &$itemConfig) {
433 if (!empty($itemConfig[2])) {
434 $tcaPath = implode(
'.', [$table,
'columns', $fieldName,
'config',
'items']);
437 array_shift($pathParts);
438 $path = implode(
'/', $pathParts);
444 $this->messages[] =
'[' . $tcaPath .
'] ext/ or sysext/ within the path (' . $path .
') in items array is deprecated, use EXT: reference';
445 $itemConfig[2] =
'EXT:' . $path;
447 $this->messages[] =
'[' . $tcaPath .
'] i/ within the path (' . $path .
') in items array is deprecated, use EXT: reference';
448 $itemConfig[2] =
'EXT:t3skin/icons/gfx/' . $itemConfig[2];
468 foreach ($newTca as $table => &$tableDefinition) {
469 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
472 foreach ($tableDefinition[
'columns'] as $fieldName => &$fieldConfig) {
473 if (isset($fieldConfig[
'config'][
'iconsInOptionTags'])) {
474 unset($fieldConfig[
'config'][
'iconsInOptionTags']);
475 $this->messages[] =
'Configuration option "iconsInOptionTags" was removed from field "' . $fieldName .
'" in TCA table "' . $table .
'"';
491 foreach ($tca as $table => &$tableDefinition) {
492 if (!isset($tableDefinition[
'ctrl']) || !is_array($tableDefinition[
'ctrl'])) {
495 if (!isset($tableDefinition[
'ctrl'][
'iconfile'])) {
499 $tableDefinition[
'ctrl'][
'iconfile'] = str_replace(
'../typo3conf/ext/',
'EXT:', $tableDefinition[
'ctrl'][
'iconfile']);
500 $tcaPath = implode(
'.', [$table,
'ctrl',
'iconfile']);
501 $this->messages[] =
'[' . $tcaPath .
'] relative path to ../typo3conf/ext/ is deprecated, use EXT: instead';
502 }
elseif (strpos($tableDefinition[
'ctrl'][
'iconfile'],
'/') ===
false) {
503 $tableDefinition[
'ctrl'][
'iconfile'] =
'EXT:t3skin/icons/gfx/i/' . $tableDefinition[
'ctrl'][
'iconfile'];
504 $tcaPath = implode(
'.', [$table,
'ctrl',
'iconfile']);
505 $this->messages[] =
'[' . $tcaPath .
'] filename only is deprecated, use EXT: or absolute reference instead';
523 foreach ($newTca as $table => &$tableDefinition) {
524 if (empty($tableDefinition[
'columns'])) {
528 foreach ($tableDefinition[
'columns'] as $columnName => &$columnDefinition) {
530 if (empty($columnDefinition[
'config'][
'type']) || $columnDefinition[
'config'][
'type'] !==
'select') {
534 if (!empty($columnDefinition[
'config'][
'renderType'])) {
538 $tableColumnInfo =
'table "' . $table .
'" and column "' . $columnName .
'"';
539 $this->messages[] =
'Using select fields without the "renderType" setting is deprecated in ' . $tableColumnInfo;
541 $columnConfig = &$columnDefinition[
'config'];
542 if (!empty($columnConfig[
'renderMode'])) {
543 $this->messages[] =
'The "renderMode" setting for select fields is deprecated. Please use "renderType" instead in ' . $tableColumnInfo;
544 switch ($columnConfig[
'renderMode']) {
546 $columnConfig[
'renderType'] =
'selectTree';
549 $columnConfig[
'renderType'] =
'selectSingleBox';
552 $columnConfig[
'renderType'] =
'selectCheckBox';
555 $this->messages[] =
'The render mode ' . $columnConfig[
'renderMode'] .
' is invalid for the select field in ' . $tableColumnInfo;
560 $maxItems = !empty($columnConfig[
'maxitems']) ? (int)$columnConfig[
'maxitems'] : 1;
561 if ($maxItems <= 1) {
562 $columnConfig[
'renderType'] =
'selectSingle';
564 $columnConfig[
'renderType'] =
'selectMultipleSideBySide';
579 foreach ($tca as $table => &$tableDefinition) {
580 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
583 foreach ($tableDefinition[
'columns'] as $fieldName => &$fieldConfig) {
584 if (empty($fieldConfig[
'config'][
'renderType']) || $fieldConfig[
'config'][
'renderType'] !==
'selectSingle') {
587 if (!empty($fieldConfig[
'config'][
'selicon_cols'])) {
589 if (!array_key_exists(
'showIconTable', $fieldConfig[
'config'])) {
590 $this->messages[] =
'The "showIconTable" setting is missing for table "' . $table .
'" and field "' . $fieldName .
'"';
591 $fieldConfig[
'config'][
'showIconTable'] =
true;
594 if (array_key_exists(
'noIconsBelowSelect', $fieldConfig[
'config'])) {
595 $this->messages[] =
'The "noIconsBelowSelect" setting for select fields was removed. Please define the setting "showIconTable" for table "' . $table .
'" and field "' . $fieldName .
'"';
596 if (!$fieldConfig[
'config'][
'noIconsBelowSelect']) {
598 if (!array_key_exists(
'showIconTable', $fieldConfig[
'config'])) {
599 $fieldConfig[
'config'][
'showIconTable'] =
true;
602 unset($fieldConfig[
'config'][
'noIconsBelowSelect']);
604 if (array_key_exists(
'suppress_icons', $fieldConfig[
'config'])) {
605 $this->messages[] =
'The "suppress_icons" setting for select fields was removed. Please define the setting "showIconTable" for table "' . $table .
'" and field "' . $fieldName .
'"';
606 unset($fieldConfig[
'config'][
'suppress_icons']);
608 if (array_key_exists(
'foreign_table_loadIcons', $fieldConfig[
'config'])) {
609 $this->messages[] =
'The "foreign_table_loadIcons" setting for select fields was removed. Please define the setting "showIconTable" for table "' . $table .
'" and field "' . $fieldName .
'"';
610 unset($fieldConfig[
'config'][
'foreign_table_loadIcons']);
625 foreach ($tca as $table => &$tableDefinition) {
626 if (!isset($tableDefinition[
'columns']) || !is_array($tableDefinition[
'columns'])) {
629 foreach ($tableDefinition[
'columns'] as $fieldName => &$fieldConfig) {
631 isset($fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'name']) && $fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'name'] ===
'wizard_element_browser'
632 && isset($fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'urlParameters'][
'mode']) && $fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'urlParameters'][
'mode'] ===
'wizard'
634 $fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'name'] =
'wizard_link';
635 unset($fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'urlParameters'][
'mode']);
636 if (empty($fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'urlParameters'])) {
637 unset($fieldConfig[
'config'][
'wizards'][
'link'][
'module'][
'urlParameters']);
639 $this->messages[] =
'Reference to "wizard_element_browser" was migrated to new "wizard_link" for field "' . $fieldName .
'" in TCA table "' . $table .
'"';