TYPO3 CMS  TYPO3_8-7
TcaMigrationTest.php
Go to the documentation of this file.
1 <?php
3 
4 /*
5  * This file is part of the TYPO3 CMS project.
6  *
7  * It is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU General Public License, either version 2
9  * of the License, or any later version.
10  *
11  * For the full copyright and license information, please read the
12  * LICENSE.txt file that was distributed with this source code.
13  *
14  * The TYPO3 project - inspiring people to share!
15  */
16 
18 
22 class TcaMigrationTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
23 {
27  public function missingTypeThrowsException()
28  {
29  $input = [
30  'aTable' => [
31  'columns' => [
32  'field_a' => [
33  'label' => 'aLabel',
34  'config' => [
35  'type' => 'text',
36  ],
37  ],
38  'field_b' => [
39  'label' => 'bLabel',
40  'config' => [
41  'rows' => 42,
42  'wizards' => []
43  ],
44  ],
45  ],
46  ],
47  ];
48  $this->expectException(\RuntimeException::class);
49  $this->expectExceptionCode(1482394401);
50  $subject = new TcaMigration();
51  $subject->migrate($input);
52  }
53 
58  {
59  $input = $expected = [
60  'aTable' => [
61  'ctrl' => [
62  'aKey' => 'aValue',
63  ],
64  'columns' => [
65  'aField' => [
66  'label' => 'foo',
67  'config' => [
68  'type' => 'aType',
69  'lolli' => 'did this',
70  ]
71  ],
72  ],
73  'types' => [
74  0 => [
75  'showitem' => 'this,should;stay,this,too',
76  ],
77  ],
78  ],
79  ];
80  $subject = new TcaMigration();
81  $this->assertEquals($expected, $subject->migrate($input));
82  }
83 
88  {
89  $input = [
90  'aTable' => [
91  'columns' => [
92  'bodytext' => [
93  'exclude' => true,
94  'label' => 'aLabel',
95  'config' => [
96  'type' => 'text',
97  'rows' => 42,
98  'wizards' => [
99  't3editor' => [
100  'type' => 'userFunc',
101  'userFunc' => 'TYPO3\CMS\T3editor\FormWizard->main',
102  'title' => 't3editor',
103  'icon' => 'content-table',
104  'module' => [
105  'name' => 'wizard_table'
106  ],
107  'params' => [
108  'format' => 'html',
109  'style' => 'width:98%; height: 60%;'
110  ],
111  ],
112  ],
113  ],
114  ],
115  ],
116  ],
117  ];
118  $expected = [
119  'aTable' => [
120  'columns' => [
121  'bodytext' => [
122  'exclude' => true,
123  'label' => 'aLabel',
124  'config' => [
125  'type' => 'text',
126  'renderType' => 't3editor',
127  'format' => 'html',
128  'rows' => 42,
129  ],
130  ],
131  ],
132  ],
133  ];
134  $subject = new TcaMigration();
135  $this->assertEquals($expected, $subject->migrate($input));
136  }
137 
142  {
143  $input = [
144  'aTable' => [
145  'types' => [
146  0 => [
147  'showitem' => 'aField,anotherField;with;;;style-pointer,thirdField',
148  ],
149  1 => [
150  'showitem' => 'aField,;;;;only-a-style-pointer,anotherField',
151  ],
152  ],
153  ],
154  ];
155  $expected = [
156  'aTable' => [
157  'types' => [
158  0 => [
159  'showitem' => 'aField,anotherField;with,thirdField',
160  ],
161  1 => [
162  'showitem' => 'aField,anotherField',
163  ],
164  ],
165  ],
166  ];
167  $subject = new TcaMigration();
168  $this->assertEquals($expected, $subject->migrate($input));
169  }
170 
175  {
176  $input = [
177  'aTable' => [
178  'types' => [
179  0 => [
180  'showitem' => 'aField,anotherField;with;;nowrap,thirdField',
181  ],
182  ],
183  ],
184  ];
185  $expected = [
186  'aTable' => [
187  'types' => [
188  0 => [
189  'showitem' => 'aField,anotherField;with,thirdField',
190  'columnsOverrides' => [
191  'anotherField' => [
192  'config' => [
193  'wrap' => 'off',
194  ]
195  ],
196  ],
197  ],
198  ],
199  ],
200  ];
201  $subject = new TcaMigration();
202  $this->assertEquals($expected, $subject->migrate($input));
203  }
204 
209  {
210  $input = [
211  'aTable' => [
212  'columns' => [
213  'anotherField' => [
214  'defaultExtras' => 'nowrap',
215  ],
216  ],
217  'types' => [
218  0 => [
219  'showitem' => 'aField,anotherField;with;;enable-tab,thirdField',
220  ],
221  ],
222  ],
223  ];
224  $expected = [
225  'aTable' => [
226  'columns' => [
227  'anotherField' => [
228  'config' => [
229  'wrap' => 'off',
230  ],
231  ],
232  ],
233  'types' => [
234  0 => [
235  'showitem' => 'aField,anotherField;with,thirdField',
236  'columnsOverrides' => [
237  'anotherField' => [
238  'config' => [
239  'wrap' => 'off',
240  'enableTabulator' => true,
241  ],
242  ],
243  ],
244  ],
245  ],
246  ],
247  ];
248  $subject = new TcaMigration();
249  $this->assertEquals($expected, $subject->migrate($input));
250  }
251 
256  {
257  $input = [
258  'aTable' => [
259  'columns' => [
260  'bodytext' => [
261  'exclude' => true,
262  'label' => 'aLabel',
263  'config' => [
264  'type' => 'text',
265  'rows' => 42,
266  'wizards' => [
267  't3editorHtml' => [
268  'type' => 'userFunc',
269  'userFunc' => 'TYPO3\CMS\T3editor\FormWizard->main',
270  'enableByTypeConfig' => 1,
271  'title' => 't3editor',
272  'icon' => 'content-table',
273  'module' => [
274  'name' => 'wizard_table'
275  ],
276  'params' => [
277  'format' => 'html',
278  'style' => 'width:98%; height: 60%;'
279  ],
280  ],
281  't3editorTypoScript' => [
282  'type' => 'userFunc',
283  'userFunc' => 'TYPO3\CMS\T3editor\FormWizard->main',
284  'enableByTypeConfig' => 1,
285  'title' => 't3editor',
286  'icon' => 'content-table',
287  'module' => [
288  'name' => 'wizard_table'
289  ],
290  'params' => [
291  'format' => 'typoscript',
292  'style' => 'width:98%; height: 60%;'
293  ],
294  ],
295  ],
296  ],
297  ],
298  ],
299  'types' => [
300  'firstType' => [
301  'showitem' => 'foo,bodytext;;;wizards[t3editorTypoScript|someOtherWizard],bar',
302  ],
303  'secondType' => [
304  'showitem' => 'foo,bodytext;;;nowrap:wizards[t3editorHtml], bar',
305  ],
306  ],
307  ],
308  ];
309  $expected = [
310  'aTable' => [
311  'columns' => [
312  'bodytext' => [
313  'exclude' => true,
314  'label' => 'aLabel',
315  'config' => [
316  'type' => 'text',
317  'rows' => 42,
318  ],
319  ],
320  ],
321  'types' => [
322  'firstType' => [
323  'showitem' => 'foo,bodytext,bar',
324  'columnsOverrides' => [
325  'bodytext' => [
326  'config' => [
327  'format' => 'typoscript',
328  'renderType' => 't3editor',
329  ],
330  ],
331  ],
332  ],
333  'secondType' => [
334  'showitem' => 'foo,bodytext,bar',
335  'columnsOverrides' => [
336  'bodytext' => [
337  'config' => [
338  'format' => 'html',
339  'renderType' => 't3editor',
340  'wrap' => 'off',
341  ],
342  ],
343  ],
344  ],
345  ],
346  ],
347  ];
348  $subject = new TcaMigration();
349  $this->assertEquals($expected, $subject->migrate($input));
350  }
351 
356  {
357  $input = [
358  'aTable' => [
359  'columns' => [
360  'bodytext' => [
361  'exclude' => true,
362  'label' => 'aLabel',
363  'config' => [
364  'type' => 'text',
365  'rows' => 42,
366  'wizards' => [
367  't3editorHtml' => [
368  'type' => 'userFunc',
369  'userFunc' => 'TYPO3\CMS\T3editor\FormWizard->main',
370  'enableByTypeConfig' => 1,
371  'title' => 't3editor',
372  'icon' => 'content-table',
373  'module' => [
374  'name' => 'wizard_table'
375  ],
376  'params' => [
377  'format' => 'html',
378  'style' => 'width:98%; height: 60%;'
379  ],
380  ],
381  ],
382  ],
383  ],
384  ],
385  ],
386  ];
387  $expected = [
388  'aTable' => [
389  'columns' => [
390  'bodytext' => [
391  'exclude' => true,
392  'label' => 'aLabel',
393  'config' => [
394  'type' => 'text',
395  'rows' => 42,
396  ],
397  ],
398  ],
399  ],
400  ];
401  $subject = new TcaMigration();
402  $this->assertEquals($expected, $subject->migrate($input));
403  }
404 
409  {
410  $input = [
411  'aTable' => [
412  'columns' => [
413  'anotherField' => [
414  ],
415  ],
416  'types' => [
417  0 => [
418  'showitem' => 'aField;;;',
419  ],
420  1 => []
421  ],
422  ],
423  ];
424  $subject = new TcaMigration();
425  $subject->migrate($input);
426  $this->assertEmpty($subject->getMessages());
427  }
428 
433  {
434  $input = [
435  'aTable' => [
436  'types' => [
437  'firstType' => [
438  'showitem' => 'field1;field1Label,field2;fieldLabel2;palette1,field2;;palette2',
439  ],
440  ],
441  ],
442  ];
443  $expected = [
444  'aTable' => [
445  'types' => [
446  'firstType' => [
447  'showitem' => 'field1;field1Label,field2;fieldLabel2,--palette--;;palette1,field2,--palette--;;palette2',
448  ],
449  ],
450  ],
451  ];
452  $subject = new TcaMigration();
453  $this->assertEquals($expected, $subject->migrate($input));
454  }
455 
460  {
461  $input = [
462  'aTable' => [
463  'columns' => [
464  'bodytext' => [
465  'config' => [
466  'type' => 'text',
467  'wizards' => [
468  't3editorHtml' => [
469  'icon' => 'wizard_table.gif',
470  ],
471  ],
472  ],
473  ],
474  ],
475  ],
476  ];
477 
478  $expected = [
479  'aTable' => [
480  'columns' => [
481  'bodytext' => [
482  'config' => [
483  'type' => 'text',
484  'wizards' => [
485  't3editorHtml' => [
486  'icon' => 'content-table',
487  ],
488  ],
489  ],
490  ],
491  ],
492  ],
493  ];
494 
495  $subject = new TcaMigration();
496  $this->assertEquals($expected, $subject->migrate($input));
497  }
498 
503  {
504  $input = [
505  'aTable' => [
506  'columns' => [
507  'foo' => [
508  'config' => [
509  'type' => 'select',
510  'items' => [
511  ['foo', 0, 'ext/myext/foo/bar.gif'],
512  ['bar', 1, 'sysext/myext/foo/bar.gif'],
513  ],
514  ],
515  ],
516  ],
517  ],
518  ];
519 
520  $expected = [
521  'aTable' => [
522  'columns' => [
523  'foo' => [
524  'config' => [
525  'type' => 'select',
526  'renderType' => 'selectSingle',
527  'items' => [
528  ['foo', 0, 'EXT:myext/foo/bar.gif'],
529  ['bar', 1, 'EXT:myext/foo/bar.gif'],
530  ],
531  ],
532  ],
533  ],
534  ],
535  ];
536 
537  $subject = new TcaMigration();
538  $this->assertEquals($expected, $subject->migrate($input));
539  }
540 
545  {
546  $input = [
547  'aTable' => [
548  'columns' => [
549  'foo' => [
550  'config' => [
551  'type' => 'select',
552  'items' => [
553  ['foo', 0, 'i/tt_content.gif'],
554  ],
555  ],
556  ],
557  ],
558  ],
559  ];
560 
561  $expected = [
562  'aTable' => [
563  'columns' => [
564  'foo' => [
565  'config' => [
566  'type' => 'select',
567  'renderType' => 'selectSingle',
568  'items' => [
569  ['foo', 0, 'EXT:backend/Resources/Public/Images/tt_content.gif'],
570  ],
571  ],
572  ],
573  ],
574  ],
575  ];
576 
577  $subject = new TcaMigration();
578  $this->assertEquals($expected, $subject->migrate($input));
579  }
580 
585  {
586  $input = [
587  'aTable' => [
588  'columns' => [
589  'foo' => [
590  'config' => [
591  'type' => 'select',
592  'iconsInOptionTags' => 1,
593  ],
594  ],
595  ],
596  ],
597  ];
598  $expected = [
599  'aTable' => [
600  'columns' => [
601  'foo' => [
602  'config' => [
603  'type' => 'select',
604  'renderType' => 'selectSingle',
605  ],
606  ],
607  ],
608  ],
609  ];
610 
611  $subject = new TcaMigration();
612  $this->assertEquals($expected, $subject->migrate($input));
613  }
614 
619  {
620  $input = [
621  'aTable' => [
622  'ctrl' => [
623  'iconfile' => '../typo3conf/ext/myExt/iconfile.gif',
624  ],
625  ],
626  ];
627  $expected = [
628  'aTable' => [
629  'ctrl' => [
630  'iconfile' => 'EXT:myExt/iconfile.gif',
631  ],
632  ],
633  ];
634  $subject = new TcaMigration();
635  $this->assertEquals($expected, $subject->migrate($input));
636  }
637 
642  {
643  $input = [
644  'aTable' => [
645  'ctrl' => [
646  'iconfile' => 'iconfile.gif',
647  ],
648  ],
649  ];
650  $expected = [
651  'aTable' => [
652  'ctrl' => [
653  'iconfile' => 'EXT:backend/Resources/Public/Images/iconfile.gif',
654  ],
655  ],
656  ];
657  $subject = new TcaMigration();
658  $this->assertEquals($expected, $subject->migrate($input));
659  }
660 
665  {
666  $input = [
667  'aTable' => [
668  'ctrl' => [
669  'iconfile' => 'EXT:myExt/iconfile.gif',
670  ],
671  ],
672  ];
673  $expected = [
674  'aTable' => [
675  'ctrl' => [
676  'iconfile' => 'EXT:myExt/iconfile.gif',
677  ],
678  ],
679  ];
680  $subject = new TcaMigration();
681  $this->assertEquals($expected, $subject->migrate($input));
682  }
683 
688  {
689  $input = [
690  'aTable-do-not-migrate-because-renderType-is-set' => [
691  'columns' => [
692  'a-column' => [
693  'config' => [
694  'type' => 'select',
695  'renderType' => 'fooBar'
696  ]
697  ]
698  ],
699  ],
700  'aTable-do-migrate-because-renderType-is-not-set' => [
701  'columns' => [
702  'a-tree-column' => [
703  'config' => [
704  'type' => 'select',
705  'renderMode' => 'tree'
706  ]
707  ],
708  'a-singlebox-column' => [
709  'config' => [
710  'type' => 'select',
711  'renderMode' => 'singlebox'
712  ]
713  ],
714  'a-checkbox-column' => [
715  'config' => [
716  'type' => 'select',
717  'renderMode' => 'checkbox'
718  ]
719  ],
720  'an-unknown-column' => [
721  'config' => [
722  'type' => 'select',
723  'renderMode' => 'unknown'
724  ]
725  ],
726  'a-maxitems-column-not-set' => [
727  'config' => [
728  'type' => 'select',
729  ]
730  ],
731  'a-maxitems-column-0' => [
732  'config' => [
733  'type' => 'select',
734  'maxitems' => '0'
735  ]
736  ],
737  'a-maxitems-column-1' => [
738  'config' => [
739  'type' => 'select',
740  'maxitems' => '1'
741  ]
742  ],
743  'a-maxitems-column-2' => [
744  'config' => [
745  'type' => 'select',
746  'maxitems' => '2'
747  ]
748  ],
749  'a-tree-column-with-maxitems' => [
750  'config' => [
751  'type' => 'select',
752  'renderMode' => 'tree',
753  'maxitems' => '1'
754  ]
755  ],
756  'a-singlebox-column-with-maxitems' => [
757  'config' => [
758  'type' => 'select',
759  'renderMode' => 'singlebox',
760  'maxitems' => '1'
761  ]
762  ],
763  'a-checkbox-column-with-maxitems' => [
764  'config' => [
765  'type' => 'select',
766  'renderMode' => 'checkbox',
767  'maxitems' => '1'
768  ]
769  ],
770  ],
771  ],
772  ];
773  $expected = [
774  'aTable-do-not-migrate-because-renderType-is-set' => [
775  'columns' => [
776  'a-column' => [
777  'config' => [
778  'type' => 'select',
779  'renderType' => 'fooBar'
780  ]
781  ]
782  ],
783  ],
784  'aTable-do-migrate-because-renderType-is-not-set' => [
785  'columns' => [
786  'a-tree-column' => [
787  'config' => [
788  'type' => 'select',
789  'renderMode' => 'tree',
790  'renderType' => 'selectTree'
791  ]
792  ],
793  'a-singlebox-column' => [
794  'config' => [
795  'type' => 'select',
796  'renderMode' => 'singlebox',
797  'renderType' => 'selectSingleBox'
798  ]
799  ],
800  'a-checkbox-column' => [
801  'config' => [
802  'type' => 'select',
803  'renderMode' => 'checkbox',
804  'renderType' => 'selectCheckBox'
805  ]
806  ],
807  'an-unknown-column' => [
808  'config' => [
809  'type' => 'select',
810  'renderMode' => 'unknown'
811  ]
812  ],
813  'a-maxitems-column-not-set' => [
814  'config' => [
815  'type' => 'select',
816  'renderType' => 'selectSingle'
817  ]
818  ],
819  'a-maxitems-column-0' => [
820  'config' => [
821  'type' => 'select',
822  'maxitems' => '0',
823  'renderType' => 'selectSingle'
824  ]
825  ],
826  'a-maxitems-column-1' => [
827  'config' => [
828  'type' => 'select',
829  'maxitems' => 1,
830  'renderType' => 'selectSingle'
831  ]
832  ],
833  'a-maxitems-column-2' => [
834  'config' => [
835  'type' => 'select',
836  'maxitems' => 2,
837  'renderType' => 'selectMultipleSideBySide'
838  ]
839  ],
840  'a-tree-column-with-maxitems' => [
841  'config' => [
842  'type' => 'select',
843  'renderMode' => 'tree',
844  'renderType' => 'selectTree',
845  'maxitems' => '1'
846  ]
847  ],
848  'a-singlebox-column-with-maxitems' => [
849  'config' => [
850  'type' => 'select',
851  'renderMode' => 'singlebox',
852  'renderType' => 'selectSingleBox',
853  'maxitems' => '1'
854  ]
855  ],
856  'a-checkbox-column-with-maxitems' => [
857  'config' => [
858  'type' => 'select',
859  'renderMode' => 'checkbox',
860  'renderType' => 'selectCheckBox',
861  'maxitems' => '1'
862  ]
863  ],
864  ],
865  ],
866  ];
867  $subject = new TcaMigration();
868  $this->assertEquals($expected, $subject->migrate($input));
869  }
870 
875  {
876  return [
877  'not-a-select-is-kept' => [
878  [
879  // Given config section
880  'type' => 'input',
881  ],
882  [
883  // Expected config section
884  'type' => 'input',
885  ],
886  ],
887  'not-a-selectSingle-is-kept' => [
888  [
889  'type' => 'select',
890  'renderType' => 'selectCheckBox',
891  ],
892  [
893  'type' => 'select',
894  'renderType' => 'selectCheckBox',
895  ],
896  ],
897  'noIconsBelowSelect-true-is-removed' => [
898  [
899  'type' => 'select',
900  'renderType' => 'selectSingle',
901  'noIconsBelowSelect' => true,
902  ],
903  [
904  'type' => 'select',
905  'renderType' => 'selectSingle',
906  ],
907  ],
908  'noIconsBelowSelect-false-is-removed-sets-field-wizard' => [
909  [
910  'type' => 'select',
911  'renderType' => 'selectSingle',
912  'noIconsBelowSelect' => false,
913  ],
914  [
915  'type' => 'select',
916  'renderType' => 'selectSingle',
917  'fieldWizard' => [
918  'selectIcons' => [
919  'disabled' => false,
920  ],
921  ],
922  ],
923  ],
924  'noIconsBelowSelect-false-is-removes-given-showIconTable-false' => [
925  [
926  'type' => 'select',
927  'renderType' => 'selectSingle',
928  'noIconsBelowSelect' => false,
929  'showIconTable' => false,
930  ],
931  [
932  'type' => 'select',
933  'renderType' => 'selectSingle',
934  ],
935  ],
936  'suppress-icons-1-is-removed' => [
937  [
938  'type' => 'select',
939  'renderType' => 'selectSingle',
940  'suppress_icons' => '1',
941  ],
942  [
943  'type' => 'select',
944  'renderType' => 'selectSingle',
945  ],
946  ],
947  'suppress-icons-value-is-removed' => [
948  [
949  'type' => 'select',
950  'renderType' => 'selectSingle',
951  'suppress_icons' => 'IF_VALUE_FALSE',
952  ],
953  [
954  'type' => 'select',
955  'renderType' => 'selectSingle',
956  ],
957  ],
958  'selicon-cols-is-removed' => [
959  [
960  'type' => 'select',
961  'renderType' => 'selectSingle',
962  'selicon_cols' => 16,
963  ],
964  [
965  'type' => 'select',
966  'renderType' => 'selectSingle',
967  ],
968  ],
969  'foreign_table_loadIcons-is-removed' => [
970  [
971  'type' => 'select',
972  'renderType' => 'selectSingle',
973  'foreign_table_loadIcons' => true,
974  ],
975  [
976  'type' => 'select',
977  'renderType' => 'selectSingle',
978  ],
979  ],
980  ];
981  }
982 
989  public function migrateSetsShowIconTableIfMissing(array $givenConfig, array $expectedConfig)
990  {
991  $input = [
992  'aTable' => [
993  'columns' => [
994  'aField' => [
995  'config' => $givenConfig,
996  ]
997  ],
998  ],
999  ];
1000  $expected = $input;
1001  $expected['aTable']['columns']['aField']['config'] = $expectedConfig;
1002 
1003  $subject = new TcaMigration();
1004  $this->assertEquals($expected, $subject->migrate($input));
1005  }
1006 
1011  {
1012  $input = [
1013  'aTable' => [
1014  'columns' => [
1015  'aCol' => [
1016  'config' => [
1017  'type' => 'input',
1018  'wizards' => [
1019  'link' => [
1020  'module' => [
1021  'name' => 'wizard_element_browser',
1022  'urlParameters' => [
1023  'mode' => 'wizard'
1024  ]
1025  ],
1026  ],
1027  ],
1028  ],
1029  ],
1030  ],
1031  ],
1032  ];
1033  $expected = [
1034  'aTable' => [
1035  'columns' => [
1036  'aCol' => [
1037  'config' => [
1038  'type' => 'input',
1039  'wizards' => [
1040  'link' => [
1041  'module' => [
1042  'name' => 'wizard_link',
1043  ],
1044  ],
1045  ],
1046  ],
1047  ],
1048  ],
1049  ],
1050  ];
1051 
1052  $subject = new TcaMigration();
1053  $this->assertEquals($expected, $subject->migrate($input));
1054  }
1055 
1060  {
1061  return [
1062  'columns richtext configuration' => [
1063  [
1064  // Given config section
1065  'aTable' => [
1066  'columns' => [
1067  'aField' => [
1068  'config' => [
1069  'type' => 'text',
1070  ],
1071  'defaultExtras' => 'richtext:rte_transform[]'
1072  ]
1073  ]
1074  ]
1075  ],
1076  [
1077  // Expected config section
1078  'aTable' => [
1079  'columns' => [
1080  'aField' => [
1081  'config' => [
1082  'type' => 'text',
1083  'enableRichtext' => true,
1084  'richtextConfiguration' => 'default',
1085  ],
1086  ]
1087  ]
1088  ]
1089  ],
1090  ],
1091  'columns richtext configuration without bracket' => [
1092  [
1093  'aTable' => [
1094  'columns' => [
1095  'aField' => [
1096  'config' => [
1097  'type' => 'text',
1098  ],
1099  'defaultExtras' => 'richtext:rte_transform'
1100  ]
1101  ]
1102  ]
1103  ],
1104  [
1105  'aTable' => [
1106  'columns' => [
1107  'aField' => [
1108  'config' => [
1109  'type' => 'text',
1110  'enableRichtext' => true,
1111  'richtextConfiguration' => 'default',
1112  ],
1113  ]
1114  ]
1115  ]
1116  ],
1117  ],
1118  'columns richtext with mode' => [
1119  [
1120  'aTable' => [
1121  'columns' => [
1122  'aField' => [
1123  'config' => [
1124  'type' => 'text',
1125  ],
1126  'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
1127  ]
1128  ]
1129  ]
1130  ],
1131  [
1132  'aTable' => [
1133  'columns' => [
1134  'aField' => [
1135  'config' => [
1136  'type' => 'text',
1137  'enableRichtext' => true,
1138  'richtextConfiguration' => 'default',
1139  ],
1140  ]
1141  ]
1142  ]
1143  ],
1144  ],
1145  'columns richtext with mode and others' => [
1146  [
1147  'aTable' => [
1148  'columns' => [
1149  'aField' => [
1150  'config' => [
1151  'type' => 'text',
1152  ],
1153  'defaultExtras' => 'richtext:rte_transform[flag=rte_enabled|mode=ts_css]'
1154  ]
1155  ]
1156  ]
1157  ],
1158  [
1159  'aTable' => [
1160  'columns' => [
1161  'aField' => [
1162  'config' => [
1163  'type' => 'text',
1164  'enableRichtext' => true,
1165  'richtextConfiguration' => 'default',
1166  ],
1167  ]
1168  ]
1169  ]
1170  ],
1171  ],
1172  'columns richtext with array with mode and others' => [
1173  [
1174  'aTable' => [
1175  'columns' => [
1176  'aField' => [
1177  'config' => [
1178  'type' => 'text',
1179  ],
1180  'defaultExtras' => 'richtext[]:rte_transform[flag=rte_enabled|mode=ts_css]'
1181  ]
1182  ]
1183  ]
1184  ],
1185  [
1186  'aTable' => [
1187  'columns' => [
1188  'aField' => [
1189  'config' => [
1190  'type' => 'text',
1191  'enableRichtext' => true,
1192  'richtextConfiguration' => 'default',
1193  ],
1194  ]
1195  ]
1196  ]
1197  ],
1198  ],
1199  'columns richtext * with mode and others' => [
1200  [
1201  'aTable' => [
1202  'columns' => [
1203  'aField' => [
1204  'config' => [
1205  'type' => 'text',
1206  ],
1207  'defaultExtras' => 'richtext[*]:rte_transform[flag=rte_enabled|mode=ts_css]'
1208  ]
1209  ]
1210  ]
1211  ],
1212  [
1213  'aTable' => [
1214  'columns' => [
1215  'aField' => [
1216  'config' => [
1217  'type' => 'text',
1218  'enableRichtext' => true,
1219  'richtextConfiguration' => 'default',
1220  ],
1221  ]
1222  ]
1223  ]
1224  ],
1225  ],
1226  'columns richtext cut-copy-paste with mode and others' => [
1227  [
1228  'aTable' => [
1229  'columns' => [
1230  'aField' => [
1231  'config' => [
1232  'type' => 'text',
1233  ],
1234  'defaultExtras' => 'richtext[cut|copy|paste]:rte_transform[flag=rte_enabled|mode=ts_css]'
1235  ]
1236  ]
1237  ]
1238  ],
1239  [
1240  'aTable' => [
1241  'columns' => [
1242  'aField' => [
1243  'config' => [
1244  'type' => 'text',
1245  'enableRichtext' => true,
1246  'richtextConfiguration' => 'default',
1247  ],
1248  ]
1249  ]
1250  ]
1251  ],
1252  ],
1253  'columnsOverrides richtext with brackets' => [
1254  [
1255  'aTable' => [
1256  'columns' => [
1257  'aField' => [
1258  'config' => [
1259  'type' => 'text',
1260  ],
1261  ],
1262  ],
1263  'types' => [
1264  'aType' => [
1265  'columnsOverrides' => [
1266  'aField' => [
1267  'defaultExtras' => 'richtext:rte_transform[]'
1268  ]
1269  ]
1270  ]
1271  ]
1272  ]
1273  ],
1274  [
1275  'aTable' => [
1276  'columns' => [
1277  'aField' => [
1278  'config' => [
1279  'type' => 'text',
1280  ],
1281  ],
1282  ],
1283  'types' => [
1284  'aType' => [
1285  'columnsOverrides' => [
1286  'aField' => [
1287  'config' => [
1288  'enableRichtext' => true,
1289  'richtextConfiguration' => 'default',
1290  ],
1291  ]
1292  ]
1293  ]
1294  ]
1295  ]
1296  ],
1297  ],
1298  'columnsOverrides richtext' => [
1299  [
1300  'aTable' => [
1301  'columns' => [
1302  'aField' => [
1303  'config' => [
1304  'type' => 'text',
1305  ],
1306  ],
1307  ],
1308  'types' => [
1309  'aType' => [
1310  'columnsOverrides' => [
1311  'aField' => [
1312  'defaultExtras' => 'richtext:rte_transform'
1313  ]
1314  ]
1315  ]
1316  ]
1317  ]
1318  ],
1319  [
1320  'aTable' => [
1321  'columns' => [
1322  'aField' => [
1323  'config' => [
1324  'type' => 'text',
1325  ],
1326  ],
1327  ],
1328  'types' => [
1329  'aType' => [
1330  'columnsOverrides' => [
1331  'aField' => [
1332  'config' => [
1333  'enableRichtext' => true,
1334  'richtextConfiguration' => 'default',
1335  ],
1336  ]
1337  ]
1338  ]
1339  ]
1340  ]
1341  ],
1342  ],
1343  'columnsOverrides richtext with defalut mode' => [
1344  [
1345  'aTable' => [
1346  'columns' => [
1347  'aField' => [
1348  'config' => [
1349  'type' => 'text',
1350  ],
1351  ],
1352  ],
1353  'types' => [
1354  'aType' => [
1355  'columnsOverrides' => [
1356  'aField' => [
1357  'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
1358  ]
1359  ]
1360  ]
1361  ]
1362  ]
1363  ],
1364  [
1365  'aTable' => [
1366  'columns' => [
1367  'aField' => [
1368  'config' => [
1369  'type' => 'text',
1370  ],
1371  ],
1372  ],
1373  'types' => [
1374  'aType' => [
1375  'columnsOverrides' => [
1376  'aField' => [
1377  'config' => [
1378  'enableRichtext' => true,
1379  'richtextConfiguration' => 'default',
1380  ],
1381  ]
1382  ]
1383  ]
1384  ]
1385  ]
1386  ],
1387  ],
1388  'columnsOverrides richtext with mode and others' => [
1389  [
1390  'aTable' => [
1391  'columns' => [
1392  'aField' => [
1393  'config' => [
1394  'type' => 'text',
1395  ],
1396  ],
1397  ],
1398  'types' => [
1399  'aType' => [
1400  'columnsOverrides' => [
1401  'aField' => [
1402  'defaultExtras' => 'richtext:rte_transform[flag=rte_enabled|mode=ts_css]'
1403  ]
1404  ]
1405  ]
1406  ]
1407  ]
1408  ],
1409  [
1410  'aTable' => [
1411  'columns' => [
1412  'aField' => [
1413  'config' => [
1414  'type' => 'text',
1415  ],
1416  ],
1417  ],
1418  'types' => [
1419  'aType' => [
1420  'columnsOverrides' => [
1421  'aField' => [
1422  'config' => [
1423  'enableRichtext' => true,
1424  'richtextConfiguration' => 'default',
1425  ],
1426  ]
1427  ]
1428  ]
1429  ]
1430  ]
1431  ],
1432  ],
1433  'columnsOverrides richtext brackets mode and others' => [
1434  [
1435  'aTable' => [
1436  'columns' => [
1437  'aField' => [
1438  'config' => [
1439  'type' => 'text',
1440  ],
1441  ],
1442  ],
1443  'types' => [
1444  'aType' => [
1445  'columnsOverrides' => [
1446  'aField' => [
1447  'defaultExtras' => 'richtext[]:rte_transform[flag=rte_enabled|mode=ts_css]'
1448  ]
1449  ]
1450  ]
1451  ]
1452  ]
1453  ],
1454  [
1455  'aTable' => [
1456  'columns' => [
1457  'aField' => [
1458  'config' => [
1459  'type' => 'text',
1460  ],
1461  ],
1462  ],
1463  'types' => [
1464  'aType' => [
1465  'columnsOverrides' => [
1466  'aField' => [
1467  'config' => [
1468  'enableRichtext' => true,
1469  'richtextConfiguration' => 'default',
1470  ],
1471  ]
1472  ]
1473  ]
1474  ]
1475  ]
1476  ],
1477  ],
1478  'columnsOverrides richtext star with mode and others' => [
1479  [
1480  'aTable' => [
1481  'columns' => [
1482  'aField' => [
1483  'config' => [
1484  'type' => 'text',
1485  ],
1486  ],
1487  ],
1488  'types' => [
1489  'aType' => [
1490  'columnsOverrides' => [
1491  'aField' => [
1492  'defaultExtras' => 'richtext[*]:rte_transform[flag=rte_enabled|mode=ts_css]'
1493  ]
1494  ]
1495  ]
1496  ]
1497  ]
1498  ],
1499  [
1500  'aTable' => [
1501  'columns' => [
1502  'aField' => [
1503  'config' => [
1504  'type' => 'text',
1505  ],
1506  ],
1507  ],
1508  'types' => [
1509  'aType' => [
1510  'columnsOverrides' => [
1511  'aField' => [
1512  'config' => [
1513  'enableRichtext' => true,
1514  'richtextConfiguration' => 'default',
1515  ],
1516  ]
1517  ]
1518  ]
1519  ]
1520  ]
1521  ],
1522  ],
1523  'columnsOverrides richtext cut-copy-paste ith mode and others' => [
1524  [
1525  'aTable' => [
1526  'columns' => [
1527  'aField' => [
1528  'config' => [
1529  'type' => 'text',
1530  ],
1531  ],
1532  ],
1533  'types' => [
1534  'aType' => [
1535  'columnsOverrides' => [
1536  'aField' => [
1537  'defaultExtras' => 'richtext[copy|cut|paste]:rte_transform[flag=rte_enabled|mode=ts_css]'
1538  ]
1539  ]
1540  ]
1541  ]
1542  ]
1543  ],
1544  [
1545  'aTable' => [
1546  'columns' => [
1547  'aField' => [
1548  'config' => [
1549  'type' => 'text',
1550  ],
1551  ],
1552  ],
1553  'types' => [
1554  'aType' => [
1555  'columnsOverrides' => [
1556  'aField' => [
1557  'config' => [
1558  'enableRichtext' => true,
1559  'richtextConfiguration' => 'default',
1560  ],
1561  ]
1562  ]
1563  ]
1564  ]
1565  ]
1566  ],
1567  ],
1568  ];
1569  }
1570 
1577  public function migrateRemovesRteTransformOptions(array $givenConfig, array $expectedConfig)
1578  {
1579  $subject = new TcaMigration();
1580  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
1581  }
1582 
1587  {
1588  return [
1589  'remove width' => [
1590  [
1591  // Given config section
1592  'aTable' => [
1593  'columns' => [
1594  'aField' => [
1595  'config' => [
1596  'type' => 'select',
1597  'renderType' => 'selectTree',
1598  'treeConfig' => [
1599  'appearance' => [
1600  'width' => 200
1601  ]
1602  ]
1603  ]
1604  ]
1605  ]
1606  ]
1607  ],
1608  [
1609  // Expected config section
1610  'aTable' => [
1611  'columns' => [
1612  'aField' => [
1613  'config' => [
1614  'type' => 'select',
1615  'renderType' => 'selectTree',
1616  'treeConfig' => [
1617  'appearance' => [
1618  ]
1619  ]
1620  ]
1621  ]
1622  ]
1623  ]
1624  ]
1625  ],
1626  'remove allowRecursiveMode' => [
1627  [
1628  // Given config section
1629  'aTable' => [
1630  'columns' => [
1631  'aField' => [
1632  'config' => [
1633  'type' => 'select',
1634  'renderType' => 'selectTree',
1635  'treeConfig' => [
1636  'appearance' => [
1637  'someKey' => 'value',
1638  'allowRecursiveMode' => true
1639  ]
1640  ]
1641  ]
1642  ]
1643  ]
1644  ]
1645  ],
1646  [
1647  // Expected config section
1648  'aTable' => [
1649  'columns' => [
1650  'aField' => [
1651  'config' => [
1652  'type' => 'select',
1653  'renderType' => 'selectTree',
1654  'treeConfig' => [
1655  'appearance' => [
1656  'someKey' => 'value'
1657  ]
1658  ]
1659  ]
1660  ]
1661  ]
1662  ]
1663  ]
1664  ],
1665  'move autoSizeMax to size' => [
1666  [
1667  // Given config section
1668  'aTable' => [
1669  'columns' => [
1670  'aField' => [
1671  'config' => [
1672  'type' => 'select',
1673  'renderType' => 'selectTree',
1674  'autoSizeMax' => 20,
1675  'size' => 10
1676  ]
1677  ]
1678  ]
1679  ]
1680  ],
1681  [
1682  // Expected config section
1683  'aTable' => [
1684  'columns' => [
1685  'aField' => [
1686  'config' => [
1687  'type' => 'select',
1688  'renderType' => 'selectTree',
1689  'size' => 20
1690  ]
1691  ]
1692  ]
1693  ]
1694  ]
1695  ],
1696  'keep settings for non selectTree' => [
1697  [
1698  // Given config section
1699  'aTable' => [
1700  'columns' => [
1701  'aField' => [
1702  'config' => [
1703  'type' => 'select',
1704  'renderType' => 'not a select tree',
1705  'autoSizeMax' => 20,
1706  'size' => 10,
1707  'treeConfig' => [
1708  'appearance' => [
1709  'someKey' => 'value',
1710  'allowRecursiveMode' => true,
1711  'width' => 200
1712  ]
1713  ]
1714  ]
1715  ]
1716  ]
1717  ]
1718  ],
1719  [
1720  // Expected config section
1721  'aTable' => [
1722  'columns' => [
1723  'aField' => [
1724  'config' => [
1725  'type' => 'select',
1726  'renderType' => 'not a select tree',
1727  'autoSizeMax' => 20,
1728  'size' => 10,
1729  'treeConfig' => [
1730  'appearance' => [
1731  'someKey' => 'value',
1732  'allowRecursiveMode' => true,
1733  'width' => 200
1734  ]
1735  ]
1736  ]
1737  ]
1738  ]
1739  ]
1740  ]
1741  ]
1742  ];
1743  }
1744 
1751  public function migrateSelectTreeOptions(array $input, array $expected)
1752  {
1753  $subject = new TcaMigration();
1754  $this->assertEquals($expected, $subject->migrate($input));
1755  }
1756 
1758  {
1759  return [
1760  'nothing removed' => [
1761  [
1762  'aTable' => [
1763  'columns' => [
1764  'aCol' => [
1765  'config' => [
1766  'type' => 'input',
1767  'softref' => 'email,somethingelse'
1768  ],
1769  ],
1770  ],
1771  ],
1772  ],
1773  [
1774  'aTable' => [
1775  'columns' => [
1776  'aCol' => [
1777  'config' => [
1778  'type' => 'input',
1779  'softref' => 'email,somethingelse',
1780  ],
1781  ],
1782  ],
1783  ],
1784  ]
1785  ],
1786  'TStemplate only' => [
1787  [
1788  'aTable' => [
1789  'columns' => [
1790  'aCol' => [
1791  'config' => [
1792  'type' => 'input',
1793  'softref' => 'TStemplate,somethingelse'
1794  ],
1795  ],
1796  ],
1797  ],
1798  ],
1799  [
1800  'aTable' => [
1801  'columns' => [
1802  'aCol' => [
1803  'config' => [
1804  'type' => 'input',
1805  'softref' => 'somethingelse',
1806  ],
1807  ],
1808  ],
1809  ],
1810  ]
1811  ],
1812  'TStemplate and TSconfig' => [
1813  [
1814  'aTable' => [
1815  'columns' => [
1816  'aCol' => [
1817  'config' => [
1818  'type' => 'input',
1819  'softref' => 'TStemplate,somethingelse,TSconfig'
1820  ],
1821  ],
1822  ],
1823  ],
1824  ],
1825  [
1826  'aTable' => [
1827  'columns' => [
1828  'aCol' => [
1829  'config' => [
1830  'type' => 'input',
1831  'softref' => 'somethingelse',
1832  ],
1833  ],
1834  ],
1835  ],
1836  ]
1837  ],
1838  ];
1839  }
1840 
1847  public function migrateTsTemplateSoftReferences(array $givenConfig, array $expectedConfig)
1848  {
1849  $subject = new TcaMigration();
1850  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
1851  }
1852 
1854  {
1855  return [
1856  'nothing removed' => [
1857  [
1858  'aTable' => [
1859  'columns' => [
1860  'aCol' => [
1861  'config' => [
1862  'type' => 'check'
1863  ],
1864  ],
1865  ],
1866  ],
1867  ],
1868  [
1869  'aTable' => [
1870  'columns' => [
1871  'aCol' => [
1872  'config' => [
1873  'type' => 'check'
1874  ],
1875  ],
1876  ],
1877  ],
1878  ]
1879  ],
1880  'Option removed' => [
1881  [
1882  'aTable' => [
1883  'columns' => [
1884  'aCol' => [
1885  'config' => [
1886  'type' => 'check',
1887  'showIfRTE' => false
1888  ],
1889  ],
1890  ],
1891  ],
1892  ],
1893  [
1894  'aTable' => [
1895  'columns' => [
1896  'aCol' => [
1897  'config' => [
1898  'type' => 'check'
1899  ],
1900  ],
1901  ],
1902  ],
1903  ]
1904 
1905  ],
1906  ];
1907  }
1908 
1915  public function migrateShowIfRTESetting(array $givenConfig, array $expectedConfig)
1916  {
1917  $subject = new TcaMigration();
1918  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
1919  }
1920 
1922  {
1923  return [
1924  'no workspaces enabled' => [
1925  [
1926  'aTable' => [
1927  'ctrl' => [
1928  'versioningWS' => false
1929  ],
1930  ],
1931  ],
1932  [
1933  'aTable' => [
1934  'ctrl' => [
1935  'versioningWS' => false
1936  ],
1937  ],
1938  ]
1939  ],
1940  'nothing activated' => [
1941  [
1942  'aTable' => [
1943  'ctrl' => [
1944  'label' => 'blabla'
1945  ],
1946  ],
1947  ],
1948  [
1949  'aTable' => [
1950  'ctrl' => [
1951  'label' => 'blabla'
1952  ],
1953  ],
1954  ]
1955  ],
1956  'nothing changed, workspaces enabled' => [
1957  [
1958  'aTable' => [
1959  'ctrl' => [
1960  'versioningWS' => true
1961  ],
1962  ],
1963  ],
1964  [
1965  'aTable' => [
1966  'ctrl' => [
1967  'versioningWS' => true
1968  ],
1969  ],
1970  ]
1971  ],
1972  'cast workspaces to bool' => [
1973  [
1974  'aTable' => [
1975  'ctrl' => [
1976  'versioningWS' => 1
1977  ],
1978  ],
1979  ],
1980  [
1981  'aTable' => [
1982  'ctrl' => [
1983  'versioningWS' => true
1984  ],
1985  ],
1986  ]
1987  ],
1988  'cast workspaces v2 to bool' => [
1989  [
1990  'aTable' => [
1991  'ctrl' => [
1992  'versioningWS' => 2
1993  ],
1994  ],
1995  ],
1996  [
1997  'aTable' => [
1998  'ctrl' => [
1999  'versioningWS' => true
2000  ],
2001  ],
2002  ]
2003  ],
2004  'cast workspaces v2 to bool and remove followpages' => [
2005  [
2006  'aTable' => [
2007  'ctrl' => [
2008  'versioningWS' => 2,
2009  'versioning_followPages' => true
2010  ],
2011  ],
2012  ],
2013  [
2014  'aTable' => [
2015  'ctrl' => [
2016  'versioningWS' => true
2017  ],
2018  ],
2019  ]
2020  ],
2021  ];
2022  }
2023 
2030  public function migrateWorkspaceSettings(array $givenConfig, array $expectedConfig)
2031  {
2032  $subject = new TcaMigration();
2033  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
2034  }
2035 
2040  {
2041  return [
2042  'remove transForeignTable' => [
2043  [
2044  'aTable' => [
2045  'ctrl' => [
2046  'transForeignTable' => 'pages_language_overlay',
2047  ],
2048  ],
2049  ],
2050  [
2051  'aTable' => [
2052  'ctrl' => [],
2053  ],
2054  ]
2055  ],
2056  'remove transOrigPointerTable' => [
2057  [
2058  'aTable' => [
2059  'ctrl' => [
2060  'transOrigPointerTable' => 'pages',
2061  ],
2062  ],
2063  ],
2064  [
2065  'aTable' => [
2066  'ctrl' => [],
2067  ],
2068  ]
2069  ]
2070  ];
2071  }
2072 
2079  public function migrateTranslationTable(array $givenConfig, array $expectedConfig)
2080  {
2081  $subject = new TcaMigration();
2082  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
2083  }
2084 
2089  {
2090  return [
2091  'remove l10n_mode noCopy' => [
2092  [
2093  'aTable' => [
2094  'columns' => [
2095  'aColumn' => [
2096  'l10n_mode' => 'noCopy',
2097  ],
2098  ],
2099  ],
2100  ],
2101  [
2102  'aTable' => [
2103  'columns' => [
2104  'aColumn' => [
2105  ],
2106  ],
2107  ],
2108  ]
2109  ],
2110  'remove l10n_mode mergeIfNotBlank' => [
2111  [
2112  'aTable' => [
2113  'columns' => [
2114  'aColumn' => [
2115  'l10n_mode' => 'mergeIfNotBlank',
2116  ],
2117  ],
2118  ],
2119  ],
2120  [
2121  'aTable' => [
2122  'columns' => [
2123  'aColumn' => [
2124  'config' => [
2125  'behaviour' => [
2126  'allowLanguageSynchronization' => true,
2127  ]
2128  ]
2129  ],
2130  ],
2131  ],
2132  ]
2133  ],
2134  ];
2135  }
2136 
2143  public function migrateL10nModeDefinitions(array $givenConfig, array $expectedConfig)
2144  {
2145  $subject = new TcaMigration();
2146  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
2147  }
2148 
2153  {
2154  return [
2155  'missing l10n_mode' => [
2156  [
2157  'pages' => [
2158  'columns' => [
2159  'aColumn' => [
2160  'config' => [
2161  'type' => 'input',
2162  ],
2163  'l10n_mode' => 'any-possible-value',
2164  ],
2165  ],
2166  ],
2167  'pages_language_overlay' => [
2168  'columns' => [
2169  'aColumn' => [
2170  'config' => [
2171  'type' => 'input',
2172  ],
2173  ],
2174  ],
2175  ],
2176  ],
2177  [
2178  'pages' => [
2179  'columns' => [
2180  'aColumn' => [
2181  'config' => [
2182  'type' => 'input',
2183  ],
2184  ],
2185  ],
2186  ],
2187  'pages_language_overlay' => [
2188  'columns' => [
2189  'aColumn' => [
2190  'config' => [
2191  'type' => 'input',
2192  ],
2193  'l10n_mode' => 'any-possible-value',
2194  ],
2195  ],
2196  ],
2197  ]
2198  ],
2199  'missing allowLanguageSynchronization' => [
2200  [
2201  'pages' => [
2202  'columns' => [
2203  'aColumn' => [
2204  'config' => [
2205  'type' => 'input',
2206  'behaviour' => [
2207  'allowLanguageSynchronization' => true,
2208  ]
2209  ],
2210  ],
2211  ],
2212  ],
2213  'pages_language_overlay' => [
2214  'columns' => [
2215  'aColumn' => [
2216  'config' => [
2217  'type' => 'input',
2218  ],
2219  ],
2220  ],
2221  ],
2222  ],
2223  [
2224  'pages' => [
2225  'columns' => [
2226  'aColumn' => [
2227  'config' => [
2228  'type' => 'input',
2229  'behaviour' => []
2230  ],
2231  ],
2232  ],
2233  ],
2234  'pages_language_overlay' => [
2235  'columns' => [
2236  'aColumn' => [
2237  'config' => [
2238  'type' => 'input',
2239  'behaviour' => [
2240  'allowLanguageSynchronization' => true,
2241  ]
2242  ],
2243  ],
2244  ],
2245  ],
2246  ]
2247  ],
2248  'superfluous l10n_mode' => [
2249  [
2250  'pages' => [
2251  'columns' => [
2252  'aColumn' => [],
2253  ],
2254  ],
2255  'pages_language_overlay' => [
2256  'columns' => [
2257  'aColumn' => [
2258  'config' => [
2259  'type' => 'input',
2260  ],
2261  'l10n_mode' => 'any-possible-value',
2262  ],
2263  ],
2264  ],
2265  ],
2266  [
2267  'pages' => [
2268  'columns' => [
2269  'aColumn' => [],
2270  ],
2271  ],
2272  'pages_language_overlay' => [
2273  'columns' => [
2274  'aColumn' => [
2275  'config' => [
2276  'type' => 'input',
2277  ],
2278  ],
2279  ],
2280  ],
2281  ]
2282  ],
2283  'superfluous allowLanguageSynchronization' => [
2284  [
2285  'pages' => [
2286  'columns' => [
2287  'aColumn' => [],
2288  ],
2289  ],
2290  'pages_language_overlay' => [
2291  'columns' => [
2292  'aColumn' => [
2293  'config' => [
2294  'type' => 'input',
2295  'behaviour' => [
2296  'allowLanguageSynchronization' => true,
2297  ]
2298  ],
2299  ],
2300  ],
2301  ],
2302  ],
2303  [
2304  'pages' => [
2305  'columns' => [
2306  'aColumn' => [],
2307  ],
2308  ],
2309  'pages_language_overlay' => [
2310  'columns' => [
2311  'aColumn' => [
2312  'config' => [
2313  'type' => 'input',
2314  'behaviour' => []
2315  ],
2316  ],
2317  ],
2318  ],
2319  ]
2320  ],
2321  ];
2322  }
2323 
2330  public function migratePageLocalizationDefinitions(array $givenConfig, array $expectedConfig)
2331  {
2332  $subject = new TcaMigration();
2333  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
2334  }
2335 
2340  {
2341  return [
2342  'remove counter-productive localizationMode=keep' => [
2343  [
2344  'aTable' => [
2345  'columns' => [
2346  'aColumn' => [
2347  'config' => [
2348  'type' => 'inline',
2349  'behaviour' => [
2350  'localizationMode' => 'keep',
2351  'allowLanguageSynchronization' => true,
2352  ],
2353  ]
2354  ],
2355  ],
2356  ],
2357  ],
2358  [
2359  'aTable' => [
2360  'columns' => [
2361  'aColumn' => [
2362  'config' => [
2363  'type' => 'inline',
2364  'behaviour' => [
2365  'allowLanguageSynchronization' => true,
2366  ],
2367  ],
2368  ],
2369  ],
2370  ],
2371  ]
2372  ],
2373  'keep deprecated localizationMode=keep' => [
2374  [
2375  'aTable' => [
2376  'columns' => [
2377  'aColumn' => [
2378  'config' => [
2379  'type' => 'inline',
2380  'behaviour' => [
2381  'localizationMode' => 'keep',
2382  ],
2383  ],
2384  ],
2385  ],
2386  ],
2387  ],
2388  [
2389  'aTable' => [
2390  'columns' => [
2391  'aColumn' => [
2392  'config' => [
2393  'type' => 'inline',
2394  'behaviour' => [
2395  'localizationMode' => 'keep',
2396  ],
2397  ]
2398  ],
2399  ],
2400  ],
2401  ]
2402  ],
2403  'keep deprecated localizationMode=select' => [
2404  [
2405  'aTable' => [
2406  'columns' => [
2407  'aColumn' => [
2408  'config' => [
2409  'type' => 'inline',
2410  'behaviour' => [
2411  'localizationMode' => 'select',
2412  ],
2413  ],
2414  ],
2415  ],
2416  ],
2417  ],
2418  [
2419  'aTable' => [
2420  'columns' => [
2421  'aColumn' => [
2422  'config' => [
2423  'type' => 'inline',
2424  'behaviour' => [
2425  'localizationMode' => 'select',
2426  ],
2427  ]
2428  ],
2429  ],
2430  ],
2431  ]
2432  ],
2433  ];
2434  }
2435 
2442  public function migrateInlineLocalizationMode(array $givenConfig, array $expectedConfig)
2443  {
2444  $subject = new TcaMigration();
2445  $this->assertEquals($expectedConfig, $subject->migrate($givenConfig));
2446  $this->assertNotEmpty($subject->getMessages());
2447  }
2448 
2453  {
2454  return [
2455  'move single field name' => [
2456  [
2457  'aTable' => [
2458  'ctrl' => [
2459  'requestUpdate' => 'aField',
2460  ],
2461  'columns' => [
2462  'aField' => [
2463  'label' => 'foo',
2464  'config' => [
2465  'type' => 'input',
2466  ],
2467  ],
2468  ],
2469  ],
2470  ],
2471  [
2472  'aTable' => [
2473  'ctrl' => [],
2474  'columns' => [
2475  'aField' => [
2476  'label' => 'foo',
2477  'config' => [
2478  'type' => 'input',
2479  ],
2480  'onChange' => 'reload',
2481  ],
2482  ],
2483  ],
2484  ],
2485  ],
2486  'ignore missing field but migrate others' => [
2487  [
2488  'aTable' => [
2489  'ctrl' => [
2490  'requestUpdate' => 'aField, bField, cField, ',
2491  ],
2492  'columns' => [
2493  'aField' => [],
2494  'cField' => [],
2495  ],
2496  ],
2497  ],
2498  [
2499  'aTable' => [
2500  'ctrl' => [],
2501  'columns' => [
2502  'aField' => [
2503  'onChange' => 'reload',
2504  ],
2505  'cField' => [
2506  'onChange' => 'reload',
2507  ],
2508  ],
2509  ],
2510  ],
2511  ],
2512  ];
2513  }
2514 
2521  public function migrateMovesRequestUpdateCtrlFieldToColumns(array $input, array $expected)
2522  {
2523  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
2524  }
2525 
2530  {
2531  return [
2532  'simple input with eval date' => [
2533  [
2534  'aTable' => [
2535  'columns' => [
2536  'aField' => [
2537  'label' => 'foo',
2538  'config' => [
2539  'type' => 'input',
2540  'eval' => 'date',
2541  ],
2542  ],
2543  ],
2544  ],
2545  ],
2546  [
2547  'aTable' => [
2548  'columns' => [
2549  'aField' => [
2550  'label' => 'foo',
2551  'config' => [
2552  'type' => 'input',
2553  'eval' => 'date',
2554  'renderType' => 'inputDateTime',
2555  ],
2556  ],
2557  ],
2558  ],
2559  ]
2560  ],
2561  'simple input with eval datetime' => [
2562  [
2563  'aTable' => [
2564  'columns' => [
2565  'aField' => [
2566  'label' => 'foo',
2567  'config' => [
2568  'type' => 'input',
2569  'eval' => 'datetime',
2570  ],
2571  ],
2572  ],
2573  ],
2574  ],
2575  [
2576  'aTable' => [
2577  'columns' => [
2578  'aField' => [
2579  'label' => 'foo',
2580  'config' => [
2581  'type' => 'input',
2582  'eval' => 'datetime',
2583  'renderType' => 'inputDateTime',
2584  ],
2585  ],
2586  ],
2587  ],
2588  ]
2589  ],
2590  'simple input with eval time' => [
2591  [
2592  'aTable' => [
2593  'columns' => [
2594  'aField' => [
2595  'label' => 'foo',
2596  'config' => [
2597  'type' => 'input',
2598  'eval' => 'time',
2599  ],
2600  ],
2601  ],
2602  ],
2603  ],
2604  [
2605  'aTable' => [
2606  'columns' => [
2607  'aField' => [
2608  'label' => 'foo',
2609  'config' => [
2610  'type' => 'input',
2611  'eval' => 'time',
2612  'renderType' => 'inputDateTime',
2613  ],
2614  ],
2615  ],
2616  ],
2617  ]
2618  ],
2619  'simple input with eval timesec' => [
2620  [
2621  'aTable' => [
2622  'columns' => [
2623  'aField' => [
2624  'label' => 'foo',
2625  'config' => [
2626  'type' => 'input',
2627  'eval' => 'timesec',
2628  ],
2629  ],
2630  ],
2631  ],
2632  ],
2633  [
2634  'aTable' => [
2635  'columns' => [
2636  'aField' => [
2637  'label' => 'foo',
2638  'config' => [
2639  'type' => 'input',
2640  'eval' => 'timesec',
2641  'renderType' => 'inputDateTime',
2642  ],
2643  ],
2644  ],
2645  ],
2646  ]
2647  ],
2648  'input with multiple evals' => [
2649  [
2650  'aTable' => [
2651  'columns' => [
2652  'aField' => [
2653  'label' => 'foo',
2654  'config' => [
2655  'type' => 'input',
2656  'eval' => 'null,date, required',
2657  ],
2658  ],
2659  ],
2660  ],
2661  ],
2662  [
2663  'aTable' => [
2664  'columns' => [
2665  'aField' => [
2666  'label' => 'foo',
2667  'config' => [
2668  'type' => 'input',
2669  'eval' => 'null,date, required',
2670  'renderType' => 'inputDateTime',
2671  ],
2672  ],
2673  ],
2674  ],
2675  ]
2676  ],
2677  ];
2678  }
2679 
2686  public function migrateMovesTypeInputDateTimeToRenderType(array $input, array $expected)
2687  {
2688  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
2689  }
2690 
2695  {
2696  return [
2697  'enableByTypeConfig on multiple wizards' => [
2698  [
2699  'aTable' => [
2700  'columns' => [
2701  'aField' => [
2702  'exclude' => true,
2703  'label' => 'aLabel',
2704  'config' => [
2705  'type' => 'text',
2706  'wizards' => [
2707  'aWizard' => [
2708  'type' => 'aType',
2709  'title' => 'aTitle',
2710  'enableByTypeConfig' => '1',
2711  ],
2712  'anotherWizard' => [
2713  'type' => 'aType',
2714  'title' => 'anotherTitle',
2715  'enableByTypeConfig' => 1,
2716  ],
2717  'yetAnotherWizard' => [
2718  'type' => 'aType',
2719  'title' => 'yetAnotherTitle',
2720  ],
2721  'andYetAnotherWizard' => [
2722  'type' => 'aType',
2723  'title' => 'yetAnotherTitle',
2724  'enableByTypeConfig' => 0,
2725  ],
2726  ],
2727  ],
2728  ],
2729  ],
2730  'types' => [
2731  'firstType' => [
2732  'columnsOverrides' => [
2733  'aField' => [
2734  'defaultExtras' => 'nowrap:wizards[aWizard|anotherWizard|aNotExistingWizard]:enable-tab',
2735  ],
2736  ],
2737  ],
2738  'secondType' => [
2739  'columnsOverrides' => [
2740  'aField' => [
2741  'defaultExtras' => 'wizards[aWizard]',
2742  ],
2743  ],
2744  ],
2745  ],
2746  ],
2747  ],
2748  [
2749  'aTable' => [
2750  'columns' => [
2751  'aField' => [
2752  'exclude' => true,
2753  'label' => 'aLabel',
2754  'config' => [
2755  'type' => 'text',
2756  'wizards' => [
2757  'yetAnotherWizard' => [
2758  'type' => 'aType',
2759  'title' => 'yetAnotherTitle',
2760  ],
2761  'andYetAnotherWizard' => [
2762  'type' => 'aType',
2763  'title' => 'yetAnotherTitle',
2764  ],
2765  ],
2766  ],
2767  ],
2768  ],
2769  'types' => [
2770  'firstType' => [
2771  'columnsOverrides' => [
2772  'aField' => [
2773  'config' => [
2774  'wrap' => 'off',
2775  'enableTabulator' => true,
2776  'wizards' => [
2777  'aWizard' => [
2778  'type' => 'aType',
2779  'title' => 'aTitle',
2780  ],
2781  'anotherWizard' => [
2782  'type' => 'aType',
2783  'title' => 'anotherTitle',
2784  ],
2785  ],
2786  ],
2787  ],
2788  ],
2789  ],
2790  'secondType' => [
2791  'columnsOverrides' => [
2792  'aField' => [
2793  'config' => [
2794  'wizards' => [
2795  'aWizard' => [
2796  'type' => 'aType',
2797  'title' => 'aTitle',
2798  ],
2799  ],
2800  ],
2801  ],
2802  ],
2803  ],
2804  ],
2805  ],
2806  ],
2807  ],
2808  'empty wizard array is removed' => [
2809  [
2810  'aTable' => [
2811  'columns' => [
2812  'aField' => [
2813  'exclude' => true,
2814  'label' => 'aLabel',
2815  'config' => [
2816  'type' => 'input',
2817  'wizards' => [
2818  'aWizard' => [
2819  'type' => 'aType',
2820  'title' => 'aTitle',
2821  'enableByTypeConfig' => 1,
2822  ],
2823  ],
2824  ],
2825  ],
2826  ],
2827  'types' => [
2828  'firstType' => [
2829  'columnsOverrides' => [
2830  'aField' => [
2831  'defaultExtras' => 'wizards[aWizard]',
2832  ],
2833  ],
2834  ],
2835  ],
2836  ],
2837  ],
2838  [
2839  'aTable' => [
2840  'columns' => [
2841  'aField' => [
2842  'exclude' => true,
2843  'label' => 'aLabel',
2844  'config' => [
2845  'type' => 'input',
2846  ],
2847  ],
2848  ],
2849  'types' => [
2850  'firstType' => [
2851  'columnsOverrides' => [
2852  'aField' => [
2853  'config' => [
2854  'wizards' => [
2855  'aWizard' => [
2856  'type' => 'aType',
2857  'title' => 'aTitle',
2858  ],
2859  ],
2860  ],
2861  ],
2862  ],
2863  ],
2864  ],
2865  ],
2866  ],
2867  ],
2868  ];
2869  }
2870 
2877  public function migrateMovesWizardsWithEnableByTypeConfigToColumnsOverrides(array $input, array $expected)
2878  {
2879  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
2880  }
2881 
2886  {
2887  return [
2888  'colorpicker in columns field' => [
2889  [
2890  'aTable' => [
2891  'columns' => [
2892  'aCol' => [
2893  'config' => [
2894  'type' => 'input',
2895  'wizards' => [
2896  'colorpicker' => [
2897  'type' => 'colorbox',
2898  'title' => 'Color picker',
2899  'module' => [
2900  'name' => 'wizard_colorpicker',
2901  ],
2902  'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1',
2903  ],
2904  ],
2905  ],
2906  ],
2907  ],
2908  ],
2909  ],
2910  [
2911  'aTable' => [
2912  'columns' => [
2913  'aCol' => [
2914  'config' => [
2915  'type' => 'input',
2916  'renderType' => 'colorpicker',
2917  ],
2918  ],
2919  ],
2920  ],
2921  ],
2922  ],
2923  'colorpicker is not migrated if custom renderType is already given' => [
2924  [
2925  'aTable' => [
2926  'columns' => [
2927  'aCol' => [
2928  'config' => [
2929  'type' => 'input',
2930  'renderType' => 'myPersonalRenderType',
2931  'wizards' => [
2932  'colorpicker' => [
2933  'type' => 'colorbox',
2934  'title' => 'Color picker',
2935  'module' => [
2936  'name' => 'wizard_colorpicker',
2937  ],
2938  'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1',
2939  ],
2940  ],
2941  ],
2942  ],
2943  ],
2944  ],
2945  ],
2946  [
2947  'aTable' => [
2948  'columns' => [
2949  'aCol' => [
2950  'config' => [
2951  'type' => 'input',
2952  'renderType' => 'myPersonalRenderType',
2953  'wizards' => [
2954  'colorpicker' => [
2955  'type' => 'colorbox',
2956  'title' => 'Color picker',
2957  'module' => [
2958  'name' => 'wizard_colorpicker',
2959  ],
2960  'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1',
2961  ],
2962  ],
2963  ],
2964  ],
2965  ],
2966  ],
2967  ],
2968  ],
2969  'colorpicker in a type columnsOverrides field' => [
2970  [
2971  'aTable' => [
2972  'columns' => [
2973  'aField' => [
2974  'config' => [
2975  'type' => 'input',
2976  ]
2977  ]
2978  ],
2979  'types' => [
2980  'aType' => [
2981  'columnsOverrides' => [
2982  'aField' => [
2983  'config' => [
2984  'wizards' => [
2985  'colorpicker' => [
2986  'type' => 'colorbox',
2987  'title' => 'Color picker',
2988  'module' => [
2989  'name' => 'wizard_colorpicker',
2990  ],
2991  'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1',
2992  ],
2993  ],
2994  ],
2995  ],
2996  ],
2997  ],
2998  ],
2999  ],
3000  ],
3001  [
3002  'aTable' => [
3003  'columns' => [
3004  'aField' => [
3005  'config' => [
3006  'type' => 'input',
3007  ]
3008  ]
3009  ],
3010  'types' => [
3011  'aType' => [
3012  'columnsOverrides' => [
3013  'aField' => [
3014  'config' => [
3015  'type' => 'input',
3016  'renderType' => 'colorpicker',
3017  ],
3018  ],
3019  ],
3020  ],
3021  ],
3022  ],
3023  ]
3024  ]
3025  ];
3026  }
3027 
3034  public function migrateRewritesColorpickerWizard(array $input, array $expected)
3035  {
3036  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
3037  }
3038 
3043  {
3044  return [
3045  'select wizard without mode' => [
3046  [
3047  'aTable' => [
3048  'columns' => [
3049  'aField' => [
3050  'label' => 'foo',
3051  'config' => [
3052  'type' => 'text',
3053  'wizards' => [
3054  'target_picker' => [
3055  'type' => 'select',
3056  'items' => [
3057  [ 'aLabel', 'aValue' ],
3058  [ 'anotherLabel', 'anotherValue' ],
3059  ],
3060  ],
3061  ],
3062  ],
3063  ],
3064  ],
3065  ],
3066  ],
3067  [
3068  'aTable' => [
3069  'columns' => [
3070  'aField' => [
3071  'label' => 'foo',
3072  'config' => [
3073  'type' => 'text',
3074  'valuePicker' => [
3075  'items' => [
3076  [ 'aLabel', 'aValue' ],
3077  [ 'anotherLabel', 'anotherValue' ],
3078  ],
3079  ],
3080  ],
3081  ],
3082  ],
3083  ],
3084  ],
3085  ],
3086  'select wizard with empty mode' => [
3087  [
3088  'aTable' => [
3089  'columns' => [
3090  'aField' => [
3091  'label' => 'foo',
3092  'config' => [
3093  'type' => 'input',
3094  'wizards' => [
3095  'target_picker' => [
3096  'type' => 'select',
3097  'mode' => '',
3098  'items' => [
3099  [ 'aLabel', 'aValue' ],
3100  [ 'anotherLabel', 'anotherValue' ],
3101  ],
3102  ],
3103  ],
3104  ],
3105  ],
3106  ],
3107  ],
3108  ],
3109  [
3110  'aTable' => [
3111  'columns' => [
3112  'aField' => [
3113  'label' => 'foo',
3114  'config' => [
3115  'type' => 'input',
3116  'valuePicker' => [
3117  'mode' => '',
3118  'items' => [
3119  [ 'aLabel', 'aValue' ],
3120  [ 'anotherLabel', 'anotherValue' ],
3121  ],
3122  ],
3123  ],
3124  ],
3125  ],
3126  ],
3127  ],
3128  ],
3129  'select wizard with prepend mode' => [
3130  [
3131  'aTable' => [
3132  'columns' => [
3133  'aField' => [
3134  'label' => 'foo',
3135  'config' => [
3136  'type' => 'input',
3137  'wizards' => [
3138  'target_picker' => [
3139  'type' => 'select',
3140  'mode' => 'prepend',
3141  'items' => [
3142  [ 'aLabel', 'aValue' ],
3143  [ 'anotherLabel', 'anotherValue' ],
3144  ],
3145  ],
3146  ],
3147  ],
3148  ],
3149  ],
3150  ],
3151  ],
3152  [
3153  'aTable' => [
3154  'columns' => [
3155  'aField' => [
3156  'label' => 'foo',
3157  'config' => [
3158  'type' => 'input',
3159  'valuePicker' => [
3160  'mode' => 'prepend',
3161  'items' => [
3162  [ 'aLabel', 'aValue' ],
3163  [ 'anotherLabel', 'anotherValue' ],
3164  ],
3165  ],
3166  ],
3167  ],
3168  ],
3169  ],
3170  ],
3171  ],
3172  'select wizard with append mode' => [
3173  [
3174  'aTable' => [
3175  'columns' => [
3176  'aField' => [
3177  'label' => 'foo',
3178  'config' => [
3179  'type' => 'input',
3180  'wizards' => [
3181  'target_picker' => [
3182  'type' => 'select',
3183  'mode' => 'append',
3184  'items' => [
3185  [ 'aLabel', 'aValue' ],
3186  [ 'anotherLabel', 'anotherValue' ],
3187  ],
3188  ],
3189  ],
3190  ],
3191  ],
3192  ],
3193  ],
3194  ],
3195  [
3196  'aTable' => [
3197  'columns' => [
3198  'aField' => [
3199  'label' => 'foo',
3200  'config' => [
3201  'type' => 'input',
3202  'valuePicker' => [
3203  'mode' => 'append',
3204  'items' => [
3205  [ 'aLabel', 'aValue' ],
3206  [ 'anotherLabel', 'anotherValue' ],
3207  ],
3208  ],
3209  ],
3210  ],
3211  ],
3212  ],
3213  ],
3214  ],
3215  'select wizard with broken mode' => [
3216  [
3217  'aTable' => [
3218  'columns' => [
3219  'aField' => [
3220  'label' => 'foo',
3221  'config' => [
3222  'type' => 'input',
3223  'wizards' => [
3224  'target_picker' => [
3225  'type' => 'select',
3226  'mode' => 'foo',
3227  'items' => [
3228  [ 'aLabel', 'aValue' ],
3229  [ 'anotherLabel', 'anotherValue' ],
3230  ],
3231  ],
3232  ],
3233  ],
3234  ],
3235  ],
3236  ],
3237  ],
3238  [
3239  'aTable' => [
3240  'columns' => [
3241  'aField' => [
3242  'label' => 'foo',
3243  'config' => [
3244  'type' => 'input',
3245  'valuePicker' => [
3246  'items' => [
3247  [ 'aLabel', 'aValue' ],
3248  [ 'anotherLabel', 'anotherValue' ],
3249  ],
3250  ],
3251  ],
3252  ],
3253  ],
3254  ],
3255  ],
3256  ],
3257  'select wizard without items is not migrated' => [
3258  [
3259  'aTable' => [
3260  'columns' => [
3261  'aField' => [
3262  'label' => 'foo',
3263  'config' => [
3264  'type' => 'input',
3265  'wizards' => [
3266  'target_picker' => [
3267  'type' => 'select',
3268  'mode' => '',
3269  ],
3270  ],
3271  ],
3272  ],
3273  ],
3274  ],
3275  ],
3276  [
3277  'aTable' => [
3278  'columns' => [
3279  'aField' => [
3280  'label' => 'foo',
3281  'config' => [
3282  'type' => 'input',
3283  'wizards' => [
3284  'target_picker' => [
3285  'type' => 'select',
3286  'mode' => '',
3287  ],
3288  ],
3289  ],
3290  ],
3291  ],
3292  ],
3293  ],
3294  ],
3295  'select wizard with broken items is not migrated' => [
3296  [
3297  'aTable' => [
3298  'columns' => [
3299  'aField' => [
3300  'label' => 'foo',
3301  'config' => [
3302  'type' => 'input',
3303  'wizards' => [
3304  'target_picker' => [
3305  'type' => 'select',
3306  'mode' => '',
3307  'items' => 'foo',
3308  ],
3309  ],
3310  ],
3311  ],
3312  ],
3313  ],
3314  ],
3315  [
3316  'aTable' => [
3317  'columns' => [
3318  'aField' => [
3319  'label' => 'foo',
3320  'config' => [
3321  'type' => 'input',
3322  'wizards' => [
3323  'target_picker' => [
3324  'type' => 'select',
3325  'mode' => '',
3326  'items' => 'foo',
3327  ],
3328  ],
3329  ],
3330  ],
3331  ],
3332  ],
3333  ],
3334  ],
3335  'two wizards' => [
3336  [
3337  'aTable' => [
3338  'columns' => [
3339  'aField' => [
3340  'label' => 'foo',
3341  'config' => [
3342  'type' => 'input',
3343  'wizards' => [
3344  'target_picker' => [
3345  'type' => 'select',
3346  'mode' => '',
3347  'items' => [
3348  [ 'aLabel', 'aValue' ],
3349  [ 'anotherLabel', 'anotherValue' ],
3350  ],
3351  ],
3352  'differentWizard' => [
3353  'type' => 'foo',
3354  ]
3355  ],
3356  ],
3357  ],
3358  ],
3359  ],
3360  ],
3361  [
3362  'aTable' => [
3363  'columns' => [
3364  'aField' => [
3365  'label' => 'foo',
3366  'config' => [
3367  'type' => 'input',
3368  'valuePicker' => [
3369  'mode' => '',
3370  'items' => [
3371  [ 'aLabel', 'aValue' ],
3372  [ 'anotherLabel', 'anotherValue' ],
3373  ],
3374  ],
3375  'wizards' => [
3376  'differentWizard' => [
3377  'type' => 'foo',
3378  ],
3379  ]
3380  ],
3381  ],
3382  ],
3383  ],
3384  ],
3385  ],
3386  'select value wizard to value Picker columnsOverrides field' => [
3387  [
3388  'aTable' => [
3389  'columns' => [
3390  'aField' => [
3391  'config' => [
3392  'type' => 'text',
3393  ]
3394  ]
3395  ],
3396  'types' => [
3397  'aType' => [
3398  'columnsOverrides' => [
3399  'aField' => [
3400  'config' => [
3401  'wizards' => [
3402  'target_picker' => [
3403  'type' => 'select',
3404  'items' => [
3405  [ 'aLabel', 'aValue' ],
3406  [ 'anotherLabel', 'anotherValue' ],
3407  ],
3408  ],
3409  ],
3410  ],
3411  ],
3412  ],
3413  ],
3414  ],
3415  ],
3416  ],
3417  [
3418  'aTable' => [
3419  'columns' => [
3420  'aField' => [
3421  'config' => [
3422  'type' => 'text',
3423  ]
3424  ]
3425  ],
3426  'types' => [
3427  'aType' => [
3428  'columnsOverrides' => [
3429  'aField' => [
3430  'config' => [
3431  'valuePicker' => [
3432  'items' => [
3433  [ 'aLabel', 'aValue' ],
3434  [ 'anotherLabel', 'anotherValue' ],
3435  ],
3436  ],
3437  ],
3438  ],
3439  ],
3440  ],
3441  ],
3442  ],
3443  ]
3444  ]
3445  ];
3446  }
3447 
3454  public function migrateMovesSelectWizardToValuePicker(array $input, array $expected)
3455  {
3456  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
3457  }
3458 
3463  {
3464  return [
3465  'slider wizard with no options' => [
3466  [
3467  'aTable' => [
3468  'columns' => [
3469  'aField' => [
3470  'label' => 'foo',
3471  'config' => [
3472  'type' => 'input',
3473  'wizards' => [
3474  'slider' => [
3475  'type' => 'slider',
3476  ],
3477  ],
3478  ],
3479  ],
3480  ],
3481  ],
3482  ],
3483  [
3484  'aTable' => [
3485  'columns' => [
3486  'aField' => [
3487  'label' => 'foo',
3488  'config' => [
3489  'type' => 'input',
3490  'slider' => [],
3491  ],
3492  ],
3493  ],
3494  ],
3495  ]
3496  ],
3497  'slider wizard with options' => [
3498  [
3499  'aTable' => [
3500  'columns' => [
3501  'aField' => [
3502  'label' => 'foo',
3503  'config' => [
3504  'type' => 'input',
3505  'wizards' => [
3506  'slider' => [
3507  'type' => 'slider',
3508  'width' => 200,
3509  'step' => 10,
3510  ],
3511  ],
3512  ],
3513  ],
3514  ],
3515  ],
3516  ],
3517  [
3518  'aTable' => [
3519  'columns' => [
3520  'aField' => [
3521  'label' => 'foo',
3522  'config' => [
3523  'type' => 'input',
3524  'slider' => [
3525  'width' => 200,
3526  'step' => 10,
3527  ],
3528  ],
3529  ],
3530  ],
3531  ],
3532  ],
3533  ],
3534  'two wizards' => [
3535  [
3536  'aTable' => [
3537  'columns' => [
3538  'aField' => [
3539  'label' => 'foo',
3540  'config' => [
3541  'type' => 'input',
3542  'wizards' => [
3543  'slider' => [
3544  'type' => 'slider',
3545  'width' => 200,
3546  ],
3547  'differentWizard' => [
3548  'type' => 'foo',
3549  ]
3550  ],
3551  ],
3552  ],
3553  ],
3554  ],
3555  ],
3556  [
3557  'aTable' => [
3558  'columns' => [
3559  'aField' => [
3560  'label' => 'foo',
3561  'config' => [
3562  'type' => 'input',
3563  'slider' => [
3564  'width' => 200,
3565  ],
3566  'wizards' => [
3567  'differentWizard' => [
3568  'type' => 'foo',
3569  ],
3570  ]
3571  ],
3572  ],
3573  ],
3574  ],
3575  ],
3576  ],
3577  'slider wizard to columnsOverrides field' => [
3578  [
3579  'aTable' => [
3580  'columns' => [
3581  'aField' => [
3582  'config' => [
3583  'type' => 'input',
3584  ]
3585  ]
3586  ],
3587  'types' => [
3588  'aType' => [
3589  'columnsOverrides' => [
3590  'aField' => [
3591  'config' => [
3592  'wizards' => [
3593  'slider' => [
3594  'type' => 'slider',
3595  'width' => 200,
3596  ],
3597  'differentWizard' => [
3598  'type' => 'foo',
3599  ],
3600  ],
3601  ],
3602  ],
3603  ],
3604  ],
3605  ],
3606  ],
3607  ],
3608  [
3609  'aTable' => [
3610  'columns' => [
3611  'aField' => [
3612  'config' => [
3613  'type' => 'input',
3614  ]
3615  ]
3616  ],
3617  'types' => [
3618  'aType' => [
3619  'columnsOverrides' => [
3620  'aField' => [
3621  'config' => [
3622  'slider' => [
3623  'width' => 200,
3624  ],
3625  'wizards' => [
3626  'differentWizard' => [
3627  'type' => 'foo',
3628  ],
3629  ]
3630  ],
3631  ],
3632  ],
3633  ],
3634  ],
3635  ],
3636  ],
3637  ],
3638  ];
3639  }
3640 
3647  public function migrateMovesSliderWizardToSliderConfiguration(array $input, array $expected)
3648  {
3649  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
3650  }
3651 
3656  {
3657  return [
3658  'simple link wizard without options' => [
3659  [
3660  'aTable' => [
3661  'columns' => [
3662  'aField' => [
3663  'label' => 'foo',
3664  'config' => [
3665  'type' => 'input',
3666  'wizards' => [
3667  'link' => [
3668  'type' => 'popup',
3669  'module' => [
3670  'name' => 'wizard_link',
3671  ],
3672  ],
3673  ],
3674  ],
3675  ],
3676  ],
3677  ],
3678  ],
3679  [
3680  'aTable' => [
3681  'columns' => [
3682  'aField' => [
3683  'label' => 'foo',
3684  'config' => [
3685  'type' => 'input',
3686  'renderType' => 'inputLink',
3687  ],
3688  ],
3689  ],
3690  ],
3691  ],
3692  ],
3693  'link wizard with options' => [
3694  [
3695  'aTable' => [
3696  'columns' => [
3697  'aField' => [
3698  'label' => 'foo',
3699  'config' => [
3700  'type' => 'input',
3701  'wizards' => [
3702  'link' => [
3703  'type' => 'popup',
3704  'title' => 'aLinkTitle',
3705  'module' => [
3706  'name' => 'wizard_link',
3707  ],
3708  'JSopenParams' => 'height=800,width=600,status=0,menubar=0,scrollbars=1',
3709  'params' => [
3710  'blindLinkOptions' => 'folder',
3711  'blindLinkFields' => 'class, target',
3712  'allowedExtensions' => 'jpg',
3713  ],
3714  ],
3715  ],
3716  ],
3717  ],
3718  ],
3719  ],
3720  ],
3721  [
3722  'aTable' => [
3723  'columns' => [
3724  'aField' => [
3725  'label' => 'foo',
3726  'config' => [
3727  'type' => 'input',
3728  'renderType' => 'inputLink',
3729  'fieldControl' => [
3730  'linkPopup' => [
3731  'options' => [
3732  'title' => 'aLinkTitle',
3733  'windowOpenParameters' => 'height=800,width=600,status=0,menubar=0,scrollbars=1',
3734  'blindLinkOptions' => 'folder',
3735  'blindLinkFields' => 'class, target',
3736  'allowedExtensions' => 'jpg',
3737  ],
3738  ],
3739  ],
3740  ],
3741  ],
3742  ],
3743  ],
3744  ],
3745  ],
3746  'link wizard does not migrate if renderType is already set' => [
3747  [
3748  'aTable' => [
3749  'columns' => [
3750  'aField' => [
3751  'label' => 'foo',
3752  'config' => [
3753  'type' => 'input',
3754  'renderType' => 'aRenderType',
3755  'wizards' => [
3756  'link' => [
3757  'type' => 'popup',
3758  'module' => [
3759  'name' => 'wizard_link',
3760  ],
3761  ],
3762  ],
3763  ],
3764  ],
3765  ],
3766  ],
3767  ],
3768  [
3769  'aTable' => [
3770  'columns' => [
3771  'aField' => [
3772  'label' => 'foo',
3773  'config' => [
3774  'type' => 'input',
3775  'renderType' => 'aRenderType',
3776  'wizards' => [
3777  'link' => [
3778  'type' => 'popup',
3779  'module' => [
3780  'name' => 'wizard_link',
3781  ],
3782  ],
3783  ],
3784  ],
3785  ],
3786  ],
3787  ],
3788  ],
3789  ],
3790  'two wizards' => [
3791  [
3792  'aTable' => [
3793  'columns' => [
3794  'aField' => [
3795  'label' => 'foo',
3796  'config' => [
3797  'type' => 'input',
3798  'wizards' => [
3799  'link' => [
3800  'type' => 'popup',
3801  'module' => [
3802  'name' => 'wizard_link',
3803  ],
3804  ],
3805  'differentWizard' => [
3806  'type' => 'foo',
3807  ]
3808  ],
3809  ],
3810  ],
3811  ],
3812  ],
3813  ],
3814  [
3815  'aTable' => [
3816  'columns' => [
3817  'aField' => [
3818  'label' => 'foo',
3819  'config' => [
3820  'type' => 'input',
3821  'renderType' => 'inputLink',
3822  'wizards' => [
3823  'differentWizard' => [
3824  'type' => 'foo',
3825  ],
3826  ]
3827  ],
3828  ],
3829  ],
3830  ],
3831  ],
3832  ],
3833  'link wizard columnsOverrides field' => [
3834  [
3835  'aTable' => [
3836  'columns' => [
3837  'aField' => [
3838  'config' => [
3839  'type' => 'input',
3840  ]
3841  ]
3842  ],
3843  'types' => [
3844  'aType' => [
3845  'columnsOverrides' => [
3846  'aField' => [
3847  'config' => [
3848  'wizards' => [
3849  'link' => [
3850  'type' => 'popup',
3851  'title' => 'aLinkTitle',
3852  'module' => [
3853  'name' => 'wizard_link',
3854  ],
3855  'JSopenParams' => 'height=800,width=600,status=0,menubar=0,scrollbars=1',
3856  'params' => [
3857  'blindLinkOptions' => 'folder',
3858  'blindLinkFields' => 'class, target',
3859  'allowedExtensions' => 'jpg',
3860  ],
3861  ],
3862  'differentWizard' => [
3863  'type' => 'foo',
3864  ]
3865  ],
3866  ],
3867  ],
3868  ],
3869  ],
3870  ],
3871  ],
3872  ],
3873  [
3874  'aTable' => [
3875  'columns' => [
3876  'aField' => [
3877  'config' => [
3878  'type' => 'input',
3879  ]
3880  ]
3881  ],
3882  'types' => [
3883  'aType' => [
3884  'columnsOverrides' => [
3885  'aField' => [
3886  'config' => [
3887  'renderType' => 'inputLink',
3888  'fieldControl' => [
3889  'linkPopup' => [
3890  'options' => [
3891  'title' => 'aLinkTitle',
3892  'windowOpenParameters' => 'height=800,width=600,status=0,menubar=0,scrollbars=1',
3893  'blindLinkOptions' => 'folder',
3894  'blindLinkFields' => 'class, target',
3895  'allowedExtensions' => 'jpg',
3896  ],
3897  ],
3898  ],
3899  'wizards' => [
3900  'differentWizard' => [
3901  'type' => 'foo',
3902  ],
3903  ]
3904  ],
3905  ],
3906  ],
3907  ],
3908  ],
3909  ],
3910  ]
3911  ]
3912  ];
3913  }
3914 
3921  public function migrateMovesLinkWizardToRenderTypeWithFieldControl(array $input, array $expected)
3922  {
3923  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
3924  }
3925 
3930  {
3931  return [
3932  'simple link wizard without options' => [
3933  [
3934  'aTable' => [
3935  'columns' => [
3936  'aField' => [
3937  'label' => 'foo',
3938  'config' => [
3939  'type' => 'group',
3940  'wizards' => [
3941  'edit' => [
3942  'type' => 'popup',
3943  'module' => [
3944  'name' => 'wizard_edit',
3945  ],
3946  'icon' => 'actions-open',
3947  ],
3948  ],
3949  ],
3950  ],
3951  ],
3952  ],
3953  ],
3954  [
3955  'aTable' => [
3956  'columns' => [
3957  'aField' => [
3958  'label' => 'foo',
3959  'config' => [
3960  'type' => 'group',
3961  'fieldControl' => [
3962  'editPopup' => [
3963  'disabled' => false,
3964  ],
3965  ],
3966  ],
3967  ],
3968  ],
3969  ],
3970  ],
3971  ],
3972  'simple link wizard with options' => [
3973  [
3974  'aTable' => [
3975  'columns' => [
3976  'aField' => [
3977  'label' => 'foo',
3978  'config' => [
3979  'type' => 'select',
3980  'renderType' => 'selectMultipleSideBySide',
3981  'wizards' => [
3982  'edit' => [
3983  'type' => 'popup',
3984  'title' => 'aLabel',
3985  'module' => [
3986  'name' => 'wizard_edit',
3987  ],
3988  'popup_onlyOpenIfSelected' => 1,
3989  'icon' => 'actions-open',
3990  'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1'
3991  ],
3992  ],
3993  ],
3994  ],
3995  ],
3996  ],
3997  ],
3998  [
3999  'aTable' => [
4000  'columns' => [
4001  'aField' => [
4002  'label' => 'foo',
4003  'config' => [
4004  'type' => 'select',
4005  'renderType' => 'selectMultipleSideBySide',
4006  'fieldControl' => [
4007  'editPopup' => [
4008  'disabled' => false,
4009  'options' => [
4010  'title' => 'aLabel',
4011  'windowOpenParameters' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
4012  ],
4013  ],
4014  ],
4015  ],
4016  ],
4017  ],
4018  ],
4019  ],
4020  ],
4021  'edit wizard in columnsOverrides' => [
4022  [
4023  'aTable' => [
4024  'columns' => [
4025  'aField' => [
4026  'label' => 'foo',
4027  'config' => [
4028  'type' => 'group',
4029  ],
4030  ],
4031  ],
4032  'types' => [
4033  'aType' => [
4034  'columnsOverrides' => [
4035  'aField' => [
4036  'config' => [
4037  'wizards' => [
4038  'edit' => [
4039  'type' => 'popup',
4040  'title' => 'aLabel',
4041  'module' => [
4042  'name' => 'wizard_edit',
4043  ],
4044  'icon' => 'actions-open',
4045  ],
4046  ],
4047  ],
4048  ],
4049  ],
4050  ],
4051  ],
4052  ],
4053  ],
4054  [
4055  'aTable' => [
4056  'columns' => [
4057  'aField' => [
4058  'label' => 'foo',
4059  'config' => [
4060  'type' => 'group',
4061  ],
4062  ],
4063  ],
4064  'types' => [
4065  'aType' => [
4066  'columnsOverrides' => [
4067  'aField' => [
4068  'config' => [
4069  'fieldControl' => [
4070  'editPopup' => [
4071  'disabled' => false,
4072  'options' => [
4073  'title' => 'aLabel',
4074  ],
4075  ],
4076  ],
4077  ],
4078  ],
4079  ],
4080  ],
4081  ],
4082  ],
4083  ],
4084  ],
4085  ];
4086  }
4087 
4094  public function migrateMovesEditWizardToFieldControl(array $input, array $expected)
4095  {
4096  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
4097  }
4098 
4103  {
4104  return [
4105  'simple add wizard without options' => [
4106  [
4107  'aTable' => [
4108  'columns' => [
4109  'aField' => [
4110  'label' => 'foo',
4111  'config' => [
4112  'type' => 'group',
4113  'wizards' => [
4114  'edit' => [
4115  'type' => 'script',
4116  'module' => [
4117  'name' => 'wizard_add',
4118  ],
4119  'icon' => 'actions-add',
4120  ],
4121  ],
4122  ],
4123  ],
4124  ],
4125  ],
4126  ],
4127  [
4128  'aTable' => [
4129  'columns' => [
4130  'aField' => [
4131  'label' => 'foo',
4132  'config' => [
4133  'type' => 'group',
4134  'fieldControl' => [
4135  'addRecord' => [
4136  'disabled' => false,
4137  ],
4138  ],
4139  ],
4140  ],
4141  ],
4142  ],
4143  ],
4144  ],
4145  'simple add wizard with options' => [
4146  [
4147  'aTable' => [
4148  'columns' => [
4149  'aField' => [
4150  'label' => 'foo',
4151  'config' => [
4152  'type' => 'select',
4153  'renderType' => 'selectMultipleSideBySide',
4154  'wizards' => [
4155  'edit' => [
4156  'type' => 'script',
4157  'title' => 'aLabel',
4158  'module' => [
4159  'name' => 'wizard_add',
4160  ],
4161  'icon' => 'actions-add',
4162  'params' => [
4163  'table' => 'aTable',
4164  'pid' => 'aPid',
4165  'setValue' => 'prepend',
4166  ],
4167  ],
4168  ],
4169  ],
4170  ],
4171  ],
4172  ],
4173  ],
4174  [
4175  'aTable' => [
4176  'columns' => [
4177  'aField' => [
4178  'label' => 'foo',
4179  'config' => [
4180  'type' => 'select',
4181  'renderType' => 'selectMultipleSideBySide',
4182  'fieldControl' => [
4183  'addRecord' => [
4184  'disabled' => false,
4185  'options' => [
4186  'title' => 'aLabel',
4187  'table' => 'aTable',
4188  'pid' => 'aPid',
4189  'setValue' => 'prepend',
4190  ],
4191  ],
4192  ],
4193  ],
4194  ],
4195  ],
4196  ],
4197  ],
4198  ],
4199  'add wizard in columnsOverrides' => [
4200  [
4201  'aTable' => [
4202  'columns' => [
4203  'aField' => [
4204  'label' => 'foo',
4205  'config' => [
4206  'type' => 'group',
4207  ],
4208  ],
4209  ],
4210  'types' => [
4211  'aType' => [
4212  'columnsOverrides' => [
4213  'aField' => [
4214  'config' => [
4215  'wizards' => [
4216  'edit' => [
4217  'type' => 'script',
4218  'title' => 'aLabel',
4219  'module' => [
4220  'name' => 'wizard_add',
4221  ],
4222  'icon' => 'actions-add',
4223  'params' => [
4224  'table' => 'aTable',
4225  'pid' => 'aPid',
4226  'setValue' => 'prepend',
4227  ],
4228  ],
4229  ],
4230  ],
4231  ],
4232  ],
4233  ],
4234  ],
4235  ],
4236  ],
4237  [
4238  'aTable' => [
4239  'columns' => [
4240  'aField' => [
4241  'label' => 'foo',
4242  'config' => [
4243  'type' => 'group',
4244  ],
4245  ],
4246  ],
4247  'types' => [
4248  'aType' => [
4249  'columnsOverrides' => [
4250  'aField' => [
4251  'config' => [
4252  'fieldControl' => [
4253  'addRecord' => [
4254  'disabled' => false,
4255  'options' => [
4256  'title' => 'aLabel',
4257  'table' => 'aTable',
4258  'pid' => 'aPid',
4259  'setValue' => 'prepend',
4260  ],
4261  ],
4262  ],
4263  ],
4264  ],
4265  ],
4266  ],
4267  ],
4268  ],
4269  ],
4270  ],
4271  ];
4272  }
4273 
4280  public function migrateMovesAddWizardToFieldControl(array $input, array $expected)
4281  {
4282  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
4283  }
4284 
4289  {
4290  return [
4291  'simple list wizard without options' => [
4292  [
4293  'aTable' => [
4294  'columns' => [
4295  'aField' => [
4296  'label' => 'foo',
4297  'config' => [
4298  'type' => 'group',
4299  'wizards' => [
4300  'edit' => [
4301  'type' => 'script',
4302  'module' => [
4303  'name' => 'wizard_list',
4304  ],
4305  'icon' => 'actions-system-list-open',
4306  ],
4307  ],
4308  ],
4309  ],
4310  ],
4311  ],
4312  ],
4313  [
4314  'aTable' => [
4315  'columns' => [
4316  'aField' => [
4317  'label' => 'foo',
4318  'config' => [
4319  'type' => 'group',
4320  'fieldControl' => [
4321  'listModule' => [
4322  'disabled' => false,
4323  ],
4324  ],
4325  ],
4326  ],
4327  ],
4328  ],
4329  ],
4330  ],
4331  'simple list wizard with options' => [
4332  [
4333  'aTable' => [
4334  'columns' => [
4335  'aField' => [
4336  'label' => 'foo',
4337  'config' => [
4338  'type' => 'select',
4339  'renderType' => 'selectMultipleSideBySide',
4340  'wizards' => [
4341  'edit' => [
4342  'type' => 'script',
4343  'title' => 'aLabel',
4344  'module' => [
4345  'name' => 'wizard_list',
4346  ],
4347  'icon' => 'actions-system-list-open',
4348  'params' => [
4349  'table' => 'aTable',
4350  'pid' => 'aPid',
4351  ],
4352  ],
4353  ],
4354  ],
4355  ],
4356  ],
4357  ],
4358  ],
4359  [
4360  'aTable' => [
4361  'columns' => [
4362  'aField' => [
4363  'label' => 'foo',
4364  'config' => [
4365  'type' => 'select',
4366  'renderType' => 'selectMultipleSideBySide',
4367  'fieldControl' => [
4368  'listModule' => [
4369  'disabled' => false,
4370  'options' => [
4371  'title' => 'aLabel',
4372  'table' => 'aTable',
4373  'pid' => 'aPid',
4374  ],
4375  ],
4376  ],
4377  ],
4378  ],
4379  ],
4380  ],
4381  ],
4382  ],
4383  'list wizard in columnsOverrides' => [
4384  [
4385  'aTable' => [
4386  'columns' => [
4387  'aField' => [
4388  'label' => 'foo',
4389  'config' => [
4390  'type' => 'group',
4391  ],
4392  ],
4393  ],
4394  'types' => [
4395  'aType' => [
4396  'columnsOverrides' => [
4397  'aField' => [
4398  'config' => [
4399  'wizards' => [
4400  'edit' => [
4401  'type' => 'script',
4402  'title' => 'aLabel',
4403  'module' => [
4404  'name' => 'wizard_list',
4405  ],
4406  'icon' => 'actions-system-list-open',
4407  'params' => [
4408  'table' => 'aTable',
4409  'pid' => 'aPid',
4410  ],
4411  ],
4412  ],
4413  ],
4414  ],
4415  ],
4416  ],
4417  ],
4418  ],
4419  ],
4420  [
4421  'aTable' => [
4422  'columns' => [
4423  'aField' => [
4424  'label' => 'foo',
4425  'config' => [
4426  'type' => 'group',
4427  ],
4428  ],
4429  ],
4430  'types' => [
4431  'aType' => [
4432  'columnsOverrides' => [
4433  'aField' => [
4434  'config' => [
4435  'fieldControl' => [
4436  'listModule' => [
4437  'disabled' => false,
4438  'options' => [
4439  'title' => 'aLabel',
4440  'table' => 'aTable',
4441  'pid' => 'aPid',
4442  ],
4443  ],
4444  ],
4445  ],
4446  ],
4447  ],
4448  ],
4449  ],
4450  ],
4451  ],
4452  ],
4453  ];
4454  }
4455 
4462  public function migrateMovesListWizardToFieldControl(array $input, array $expected)
4463  {
4464  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
4465  }
4466 
4471  {
4472  return [
4473  'rte_only is removed' => [
4474  [
4475  'aTable' => [
4476  'columns' => [
4477  'aField' => [
4478  'label' => 'foo',
4479  'config' => [
4480  'type' => 'text',
4481  ],
4482  'defaultExtras' => 'rte-only',
4483  ],
4484  ],
4485  ],
4486  ],
4487  [
4488  'aTable' => [
4489  'columns' => [
4490  'aField' => [
4491  'label' => 'foo',
4492  'config' => [
4493  'type' => 'text',
4494  ],
4495  ],
4496  ],
4497  ],
4498  ],
4499  ],
4500  'rte_only is removed in columnsOverrides' => [
4501  [
4502  'aTable' => [
4503  'columns' => [],
4504  'types' => [
4505  'aType' => [
4506  'columnsOverrides' => [
4507  'aField' => [
4508  'defaultExtras' => 'rte-only',
4509  ],
4510  ],
4511  ],
4512  ],
4513  ],
4514  ],
4515  [
4516  'aTable' => [
4517  'columns' => [],
4518  'types' => [
4519  'aType' => [
4520  'columnsOverrides' => [
4521  'aField' => [],
4522  ]
4523  ]
4524  ]
4525  ],
4526  ],
4527  ],
4528  'enable-tab, fixed-font, nowrap is migrated' => [
4529  [
4530  'aTable' => [
4531  'columns' => [
4532  'aField' => [
4533  'label' => 'foo',
4534  'config' => [
4535  'type' => 'text',
4536  ],
4537  'defaultExtras' => 'enable-tab : fixed-font:nowrap',
4538  ],
4539  ],
4540  ],
4541  ],
4542  [
4543  'aTable' => [
4544  'columns' => [
4545  'aField' => [
4546  'label' => 'foo',
4547  'config' => [
4548  'type' => 'text',
4549  'enableTabulator' => true,
4550  'fixedFont' => true,
4551  'wrap' => 'off',
4552  ],
4553  ],
4554  ],
4555  ],
4556  ],
4557  ],
4558  'enable-tab, fixed-font, nowrap is migrated in columnsOverrides' => [
4559  [
4560  'aTable' => [
4561  'columns' => [],
4562  'types' => [
4563  'aType' => [
4564  'columnsOverrides' => [
4565  'aField' => [
4566  'defaultExtras' => 'enable-tab : fixed-font:nowrap',
4567  ],
4568  ],
4569  ],
4570  ],
4571  ],
4572  ],
4573  [
4574  'aTable' => [
4575  'columns' => [],
4576  'types' => [
4577  'aType' => [
4578  'columnsOverrides' => [
4579  'aField' => [
4580  'config' => [
4581  'enableTabulator' => true,
4582  'fixedFont' => true,
4583  'wrap' => 'off',
4584  ],
4585  ],
4586  ],
4587  ],
4588  ],
4589  ],
4590  ],
4591  ],
4592  ];
4593  }
4594 
4601  public function migrateMovesLastDefaultExtrasValues(array $input, array $expected)
4602  {
4603  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
4604  }
4605 
4610  {
4611  return [
4612  'simple table wizard without options' => [
4613  [
4614  'aTable' => [
4615  'columns' => [
4616  'aField' => [
4617  'label' => 'foo',
4618  'config' => [
4619  'type' => 'text',
4620  'wizards' => [
4621  'table' => [
4622  'type' => 'script',
4623  'icon' => 'content-table',
4624  'module' => [
4625  'name' => 'wizard_table'
4626  ],
4627  'notNewRecords' => 1,
4628  ],
4629  ],
4630  ],
4631  ],
4632  ],
4633  ],
4634  ],
4635  [
4636  'aTable' => [
4637  'columns' => [
4638  'aField' => [
4639  'label' => 'foo',
4640  'config' => [
4641  'type' => 'text',
4642  'renderType' => 'textTable',
4643  ],
4644  ],
4645  ],
4646  ],
4647  ],
4648  ],
4649  'simple table wizard without options in columnsOverrides' => [
4650  [
4651  'aTable' => [
4652  'columns' => [
4653  'aField' => [
4654  'config' => [
4655  'type' => 'text',
4656  ],
4657  ],
4658  ],
4659  'types' => [
4660  'aType' => [
4661  'columnsOverrides' => [
4662  'aField' => [
4663  'config' => [
4664  'wizards' => [
4665  'table' => [
4666  'type' => 'script',
4667  'icon' => 'content-table',
4668  'module' => [
4669  'name' => 'wizard_table'
4670  ],
4671  'notNewRecords' => 1,
4672  ],
4673  ],
4674  ],
4675  ],
4676  ],
4677  ],
4678  ],
4679  ],
4680  ],
4681  [
4682  'aTable' => [
4683  'columns' => [
4684  'aField' => [
4685  'config' => [
4686  'type' => 'text',
4687  ],
4688  ],
4689  ],
4690  'types' => [
4691  'aType' => [
4692  'columnsOverrides' => [
4693  'aField' => [
4694  'config' => [
4695  'renderType' => 'textTable',
4696  ],
4697  ],
4698  ],
4699  ],
4700  ],
4701  ],
4702  ],
4703  ],
4704  'simple table wizard with default options' => [
4705  [
4706  'aTable' => [
4707  'columns' => [
4708  'aField' => [
4709  'label' => 'foo',
4710  'config' => [
4711  'type' => 'text',
4712  'wizards' => [
4713  'table' => [
4714  'type' => 'script',
4715  'icon' => 'content-table',
4716  'module' => [
4717  'name' => 'wizard_table'
4718  ],
4719  'params' => [
4720  'xmlOutput' => 0
4721  ],
4722  'notNewRecords' => 1,
4723  ],
4724  ],
4725  ],
4726  ],
4727  ],
4728  ],
4729  ],
4730  [
4731  'aTable' => [
4732  'columns' => [
4733  'aField' => [
4734  'label' => 'foo',
4735  'config' => [
4736  'type' => 'text',
4737  'renderType' => 'textTable',
4738  ],
4739  ],
4740  ],
4741  ],
4742  ],
4743  ],
4744  'simple table wizard with default options in columnsOverrides' => [
4745  [
4746  'aTable' => [
4747  'columns' => [
4748  'aField' => [
4749  'config' => [
4750  'type' => 'text',
4751  ],
4752  ],
4753  ],
4754  'types' => [
4755  'aType' => [
4756  'columnsOverrides' => [
4757  'aField' => [
4758  'config' => [
4759  'wizards' => [
4760  'table' => [
4761  'type' => 'script',
4762  'icon' => 'content-table',
4763  'module' => [
4764  'name' => 'wizard_table'
4765  ],
4766  'params' => [
4767  'xmlOutput' => 0
4768  ],
4769  'notNewRecords' => 1,
4770  ],
4771  ],
4772  ],
4773  ],
4774  ],
4775  ],
4776  ],
4777  ],
4778  ],
4779  [
4780  'aTable' => [
4781  'columns' => [
4782  'aField' => [
4783  'config' => [
4784  'type' => 'text',
4785  ],
4786  ],
4787  ],
4788  'types' => [
4789  'aType' => [
4790  'columnsOverrides' => [
4791  'aField' => [
4792  'config' => [
4793  'renderType' => 'textTable',
4794  ],
4795  ],
4796  ],
4797  ],
4798  ],
4799  ],
4800  ],
4801  ],
4802  'simple table wizard with options' => [
4803  [
4804  'aTable' => [
4805  'columns' => [
4806  'aField' => [
4807  'label' => 'foo',
4808  'config' => [
4809  'type' => 'text',
4810  'wizards' => [
4811  'table' => [
4812  'type' => 'script',
4813  'title' => 'aTitle',
4814  'icon' => 'content-table',
4815  'module' => [
4816  'name' => 'wizard_table'
4817  ],
4818  'params' => [
4819  'xmlOutput' => 1,
4820  'numNewRows' => 23,
4821  ],
4822  'notNewRecords' => 1,
4823  ],
4824  ],
4825  ],
4826  ],
4827  ],
4828  ],
4829  ],
4830  [
4831  'aTable' => [
4832  'columns' => [
4833  'aField' => [
4834  'label' => 'foo',
4835  'config' => [
4836  'type' => 'text',
4837  'renderType' => 'textTable',
4838  'fieldControl' => [
4839  'tableWizard' => [
4840  'options' => [
4841  'title' => 'aTitle',
4842  'xmlOutput' => 1,
4843  'numNewRows' => 23,
4844  ],
4845  ],
4846  ],
4847  ],
4848  ],
4849  ],
4850  ],
4851  ],
4852  ],
4853  'simple table wizard with options in columnsOverrides' => [
4854  [
4855  'aTable' => [
4856  'columns' => [
4857  'aField' => [
4858  'config' => [
4859  'type' => 'text',
4860  ],
4861  ],
4862  ],
4863  'types' => [
4864  'aType' => [
4865  'columnsOverrides' => [
4866  'aField' => [
4867  'config' => [
4868  'wizards' => [
4869  'table' => [
4870  'type' => 'script',
4871  'title' => 'aTitle',
4872  'icon' => 'content-table',
4873  'module' => [
4874  'name' => 'wizard_table'
4875  ],
4876  'params' => [
4877  'xmlOutput' => '1',
4878  'numNewRows' => 23,
4879  ],
4880  'notNewRecords' => 1,
4881  ],
4882  ],
4883  ],
4884  ],
4885  ],
4886  ],
4887  ],
4888  ],
4889  ],
4890  [
4891  'aTable' => [
4892  'columns' => [
4893  'aField' => [
4894  'config' => [
4895  'type' => 'text',
4896  ],
4897  ],
4898  ],
4899  'types' => [
4900  'aType' => [
4901  'columnsOverrides' => [
4902  'aField' => [
4903  'config' => [
4904  'renderType' => 'textTable',
4905  'fieldControl' => [
4906  'tableWizard' => [
4907  'options' => [
4908  'title' => 'aTitle',
4909  'xmlOutput' => 1,
4910  'numNewRows' => 23,
4911  ],
4912  ],
4913  ],
4914  ],
4915  ],
4916  ],
4917  ],
4918  ],
4919  ],
4920  ],
4921  ],
4922  ];
4923  }
4924 
4931  public function migrateMovesTableWizardToRenderType(array $input, array $expected)
4932  {
4933  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
4934  }
4935 
4940  {
4941  return [
4942  'simple rte wizard' => [
4943  [
4944  'aTable' => [
4945  'columns' => [
4946  'aField' => [
4947  'label' => 'foo',
4948  'config' => [
4949  'type' => 'text',
4950  'enableRichtext' => true,
4951  'wizards' => [
4952  'RTE' => [
4953  'notNewRecords' => true,
4954  'RTEonly' => true,
4955  'type' => 'script',
4956  'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.W.RTE',
4957  'icon' => 'actions-wizard-rte',
4958  'module' => [
4959  'name' => 'wizard_rte'
4960  ]
4961  ],
4962  ],
4963  ],
4964  ],
4965  ],
4966  ],
4967  ],
4968  [
4969  'aTable' => [
4970  'columns' => [
4971  'aField' => [
4972  'label' => 'foo',
4973  'config' => [
4974  'type' => 'text',
4975  'enableRichtext' => true,
4976  'fieldControl' => [
4977  'fullScreenRichtext' => [
4978  'disabled' => false,
4979  'options' => [
4980  'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.W.RTE',
4981  ],
4982  ],
4983  ],
4984  ],
4985  ],
4986  ],
4987  ],
4988  ],
4989  ],
4990  'wizard is moved to columnsOverrides if enableRichtext is not set on columns' => [
4991  [
4992  'aTable' => [
4993  'columns' => [
4994  'aField' => [
4995  'label' => 'foo',
4996  'config' => [
4997  'type' => 'text',
4998  'wizards' => [
4999  'RTE' => [
5000  'notNewRecords' => true,
5001  'RTEonly' => true,
5002  'type' => 'script',
5003  'icon' => 'actions-wizard-rte',
5004  'module' => [
5005  'name' => 'wizard_rte'
5006  ],
5007  ],
5008  ],
5009  ],
5010  ],
5011  ],
5012  'types' => [
5013  'aType' => [
5014  'columnsOverrides' => [
5015  'aField' => [
5016  'config' => [
5017  'enableRichtext' => true,
5018  ],
5019  ],
5020  ],
5021  ],
5022  'anotherType' => [
5023  'columnsOverrides' => [
5024  'aField' => [
5025  'config' => [
5026  'someProperty' => 'someValue',
5027  ],
5028  ],
5029  ],
5030  ],
5031  ],
5032  ],
5033  ],
5034  [
5035  'aTable' => [
5036  'columns' => [
5037  'aField' => [
5038  'label' => 'foo',
5039  'config' => [
5040  'type' => 'text',
5041  ],
5042  ],
5043  ],
5044  'types' => [
5045  'aType' => [
5046  'columnsOverrides' => [
5047  'aField' => [
5048  'config' => [
5049  'enableRichtext' => true,
5050  'fieldControl' => [
5051  'fullScreenRichtext' => [
5052  'disabled' => false,
5053  ],
5054  ],
5055  ],
5056  ],
5057  ],
5058  ],
5059  'anotherType' => [
5060  'columnsOverrides' => [
5061  'aField' => [
5062  'config' => [
5063  'someProperty' => 'someValue',
5064  ],
5065  ],
5066  ],
5067  ],
5068  ],
5069  ],
5070  ],
5071  ],
5072  'simple rte wizard in columnsOverrides' => [
5073  [
5074  'aTable' => [
5075  'columns' => [
5076  'aField' => [
5077  'config' => [
5078  'type' => 'text',
5079  ],
5080  ],
5081  ],
5082  'types' => [
5083  'aType' => [
5084  'columnsOverrides' => [
5085  'aField' => [
5086  'config' => [
5087  'wizards' => [
5088  'RTE' => [
5089  'notNewRecords' => true,
5090  'RTEonly' => true,
5091  'type' => 'script',
5092  'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.W.RTE',
5093  'icon' => 'actions-wizard-rte',
5094  'module' => [
5095  'name' => 'wizard_rte'
5096  ]
5097  ],
5098  ],
5099  ],
5100  ],
5101  ],
5102  ],
5103  ],
5104  ],
5105  ],
5106  [
5107  'aTable' => [
5108  'columns' => [
5109  'aField' => [
5110  'config' => [
5111  'type' => 'text',
5112  ],
5113  ],
5114  ],
5115  'types' => [
5116  'aType' => [
5117  'columnsOverrides' => [
5118  'aField' => [
5119  'config' => [
5120  'fieldControl' => [
5121  'fullScreenRichtext' => [
5122  'disabled' => false,
5123  'options' => [
5124  'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.W.RTE',
5125  ],
5126  ],
5127  ],
5128  ],
5129  ],
5130  ],
5131  ],
5132  ],
5133  ],
5134  ],
5135  ],
5136  ];
5137  }
5138 
5145  public function migrateMovesFullScreenRichtextWizardToFieldControl(array $input, array $expected)
5146  {
5147  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
5148  }
5149 
5154  {
5155  return [
5156  'no suggest wizard in main field but configured in columnsOverrides' => [
5157  [
5158  'aTable' => [
5159  'columns' => [
5160  'aField' => [
5161  'config' => [
5162  'type' => 'group',
5163  'internal_type' => 'db',
5164  'allowed' => 'aTable',
5165  ],
5166  ],
5167  ],
5168  'types' => [
5169  'aType' => [
5170  'columnsOverrides' => [
5171  'aField' => [
5172  'config' => [
5173  'wizards' => [
5174  'suggest' => [
5175  'type' => 'suggest',
5176  ],
5177  ],
5178  ],
5179  ],
5180  ],
5181  ],
5182  ],
5183  ],
5184  ],
5185  [
5186  'aTable' => [
5187  'columns' => [
5188  'aField' => [
5189  'config' => [
5190  'type' => 'group',
5191  'internal_type' => 'db',
5192  'allowed' => 'aTable',
5193  'hideSuggest' => true,
5194  ],
5195  ],
5196  ],
5197  'types' => [
5198  'aType' => [
5199  'columnsOverrides' => [
5200  'aField' => [
5201  'config' => [
5202  'hideSuggest' => false,
5203  ],
5204  ],
5205  ],
5206  ],
5207  ],
5208  ],
5209  ],
5210  ],
5211  'no suggest wizard in main field but configured in columnsOverrides with options' => [
5212  [
5213  'aTable' => [
5214  'columns' => [
5215  'aField' => [
5216  'config' => [
5217  'type' => 'group',
5218  'internal_type' => 'db',
5219  'allowed' => 'aTable',
5220  ],
5221  ],
5222  ],
5223  'types' => [
5224  'aType' => [
5225  'columnsOverrides' => [
5226  'aField' => [
5227  'config' => [
5228  'wizards' => [
5229  'suggest' => [
5230  'type' => 'suggest',
5231  'default' => [
5232  'minimumCharacters' => 23,
5233  ],
5234  'aTable' => [
5235  'searchCondition' => 'doktype = 1'
5236  ],
5237  ],
5238  ],
5239  ],
5240  ],
5241  ],
5242  ],
5243  ],
5244  ],
5245  ],
5246  [
5247  'aTable' => [
5248  'columns' => [
5249  'aField' => [
5250  'config' => [
5251  'type' => 'group',
5252  'internal_type' => 'db',
5253  'allowed' => 'aTable',
5254  'hideSuggest' => true,
5255  ],
5256  ],
5257  ],
5258  'types' => [
5259  'aType' => [
5260  'columnsOverrides' => [
5261  'aField' => [
5262  'config' => [
5263  'hideSuggest' => false,
5264  'suggestOptions' => [
5265  'default' => [
5266  'minimumCharacters' => 23,
5267  ],
5268  'aTable' => [
5269  'searchCondition' => 'doktype = 1'
5270  ],
5271  ],
5272  ],
5273  ],
5274  ],
5275  ],
5276  ],
5277  ],
5278  ],
5279  ],
5280  'suggest wizard configured without options' => [
5281  [
5282  'aTable' => [
5283  'columns' => [
5284  'aField' => [
5285  'config' => [
5286  'type' => 'group',
5287  'internal_type' => 'db',
5288  'allowed' => 'aTable',
5289  'wizards' => [
5290  'suggest' => [
5291  'type' => 'suggest',
5292  ],
5293  ],
5294  ],
5295  ],
5296  ],
5297  ],
5298  ],
5299  [
5300  'aTable' => [
5301  'columns' => [
5302  'aField' => [
5303  'config' => [
5304  'type' => 'group',
5305  'internal_type' => 'db',
5306  'allowed' => 'aTable',
5307  ],
5308  ],
5309  ],
5310  ],
5311  ],
5312  ],
5313  'suggest wizard with options' => [
5314  [
5315  'aTable' => [
5316  'columns' => [
5317  'aField' => [
5318  'config' => [
5319  'type' => 'group',
5320  'internal_type' => 'db',
5321  'allowed' => 'aTable',
5322  'wizards' => [
5323  'suggest' => [
5324  'type' => 'suggest',
5325  'default' => [
5326  'minimumCharacters' => 23,
5327  'anOption' => 'anOptionValue',
5328  ],
5329  ],
5330  ],
5331  ],
5332  ],
5333  ],
5334  ],
5335  ],
5336  [
5337  'aTable' => [
5338  'columns' => [
5339  'aField' => [
5340  'config' => [
5341  'type' => 'group',
5342  'internal_type' => 'db',
5343  'allowed' => 'aTable',
5344  'suggestOptions' => [
5345  'default' => [
5346  'minimumCharacters' => 23,
5347  'anOption' => 'anOptionValue',
5348  ],
5349  ],
5350  ],
5351  ],
5352  ],
5353  ],
5354  ],
5355  ],
5356  'suggest wizard with table specific options' => [
5357  [
5358  'aTable' => [
5359  'columns' => [
5360  'aField' => [
5361  'config' => [
5362  'type' => 'group',
5363  'internal_type' => 'db',
5364  'allowed' => 'aTable',
5365  'wizards' => [
5366  'suggest' => [
5367  'type' => 'suggest',
5368  'default' => [
5369  'minimumCharacters' => 23,
5370  ],
5371  'aTable' => [
5372  'searchCondition' => 'doktype = 1'
5373  ],
5374  ],
5375  ],
5376  ],
5377  ],
5378  ],
5379  ],
5380  ],
5381  [
5382  'aTable' => [
5383  'columns' => [
5384  'aField' => [
5385  'config' => [
5386  'type' => 'group',
5387  'internal_type' => 'db',
5388  'allowed' => 'aTable',
5389  'suggestOptions' => [
5390  'default' => [
5391  'minimumCharacters' => 23,
5392  ],
5393  'aTable' => [
5394  'searchCondition' => 'doktype = 1'
5395  ],
5396  ],
5397  ],
5398  ],
5399  ],
5400  ],
5401  ],
5402  ],
5403  ];
5404  }
5405 
5412  public function migrateSuggestWizard(array $input, array $expected)
5413  {
5414  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
5415  }
5416 
5421  {
5422  return [
5423  'selectedListStyle is dropped' => [
5424  [
5425  'aTable' => [
5426  'columns' => [
5427  'aField' => [
5428  'config' => [
5429  'type' => 'group',
5430  'selectedListStyle' => 'data-foo: bar',
5431  ],
5432  ],
5433  ],
5434  ],
5435  ],
5436  [
5437  'aTable' => [
5438  'columns' => [
5439  'aField' => [
5440  'config' => [
5441  'type' => 'group',
5442  ],
5443  ],
5444  ],
5445  ],
5446  ],
5447  ],
5448  'show_thumbs true is dropped' => [
5449  [
5450  'aTable' => [
5451  'columns' => [
5452  'aField' => [
5453  'config' => [
5454  'type' => 'group',
5455  'show_thumbs' => true,
5456  ],
5457  ],
5458  ],
5459  ],
5460  ],
5461  [
5462  'aTable' => [
5463  'columns' => [
5464  'aField' => [
5465  'config' => [
5466  'type' => 'group',
5467  ],
5468  ],
5469  ],
5470  ],
5471  ],
5472  ],
5473  'show_thumbs false internal_type db disables tableList' => [
5474  [
5475  'aTable' => [
5476  'columns' => [
5477  'aField' => [
5478  'config' => [
5479  'type' => 'group',
5480  'internal_type' => 'db',
5481  'show_thumbs' => false,
5482  ],
5483  ],
5484  ],
5485  ],
5486  ],
5487  [
5488  'aTable' => [
5489  'columns' => [
5490  'aField' => [
5491  'config' => [
5492  'type' => 'group',
5493  'internal_type' => 'db',
5494  'fieldWizard' => [
5495  'recordsOverview' => [
5496  'disabled' => true,
5497  ],
5498  ],
5499  ],
5500  ],
5501  ],
5502  ],
5503  ],
5504  ],
5505  'show_thumbs false internal_type file disables fileThumbnails' => [
5506  [
5507  'aTable' => [
5508  'columns' => [
5509  'aField' => [
5510  'config' => [
5511  'type' => 'group',
5512  'internal_type' => 'file',
5513  'show_thumbs' => false,
5514  ],
5515  ],
5516  ],
5517  ],
5518  ],
5519  [
5520  'aTable' => [
5521  'columns' => [
5522  'aField' => [
5523  'config' => [
5524  'type' => 'group',
5525  'internal_type' => 'file',
5526  'fieldWizard' => [
5527  'fileThumbnails' => [
5528  'disabled' => true,
5529  ],
5530  ],
5531  ],
5532  ],
5533  ],
5534  ],
5535  ],
5536  ],
5537  'disable_controls browser sets fieldControl elementBrowser disabled' => [
5538  [
5539  'aTable' => [
5540  'columns' => [
5541  'aField' => [
5542  'config' => [
5543  'type' => 'group',
5544  'disable_controls' => 'browser',
5545  ],
5546  ],
5547  ],
5548  ],
5549  ],
5550  [
5551  'aTable' => [
5552  'columns' => [
5553  'aField' => [
5554  'config' => [
5555  'type' => 'group',
5556  'fieldControl' => [
5557  'elementBrowser' => [
5558  'disabled' => true,
5559  ],
5560  ],
5561  ],
5562  ],
5563  ],
5564  ],
5565  ],
5566  ],
5567  'disable_controls list is dropped' => [
5568  [
5569  'aTable' => [
5570  'columns' => [
5571  'aField' => [
5572  'config' => [
5573  'type' => 'group',
5574  'disable_controls' => 'list,browser',
5575  ],
5576  ],
5577  ],
5578  ],
5579  ],
5580  [
5581  'aTable' => [
5582  'columns' => [
5583  'aField' => [
5584  'config' => [
5585  'type' => 'group',
5586  'fieldControl' => [
5587  'elementBrowser' => [
5588  'disabled' => true,
5589  ],
5590  ],
5591  ],
5592  ],
5593  ],
5594  ],
5595  ],
5596  ],
5597  'disable_controls delete sets hideDeleteIcon true' => [
5598  [
5599  'aTable' => [
5600  'columns' => [
5601  'aField' => [
5602  'config' => [
5603  'type' => 'group',
5604  'disable_controls' => 'delete',
5605  ],
5606  ],
5607  ],
5608  ],
5609  ],
5610  [
5611  'aTable' => [
5612  'columns' => [
5613  'aField' => [
5614  'config' => [
5615  'type' => 'group',
5616  'hideDeleteIcon' => true,
5617  ],
5618  ],
5619  ],
5620  ],
5621  ],
5622  ],
5623  'disable_controls allowedTables sets fieldWizard tableList disabled' => [
5624  [
5625  'aTable' => [
5626  'columns' => [
5627  'aField' => [
5628  'config' => [
5629  'type' => 'group',
5630  'disable_controls' => 'allowedTables',
5631  ],
5632  ],
5633  ],
5634  ],
5635  ],
5636  [
5637  'aTable' => [
5638  'columns' => [
5639  'aField' => [
5640  'config' => [
5641  'type' => 'group',
5642  'fieldWizard' => [
5643  'tableList' => [
5644  'disabled' => true,
5645  ],
5646  ],
5647  ],
5648  ],
5649  ],
5650  ],
5651  ],
5652  ],
5653  'disable_controls upload sets fieldWizard fileUpload disabled' => [
5654  [
5655  'aTable' => [
5656  'columns' => [
5657  'aField' => [
5658  'config' => [
5659  'type' => 'group',
5660  'disable_controls' => 'upload',
5661  ],
5662  ],
5663  ],
5664  ],
5665  ],
5666  [
5667  'aTable' => [
5668  'columns' => [
5669  'aField' => [
5670  'config' => [
5671  'type' => 'group',
5672  'fieldWizard' => [
5673  'fileUpload' => [
5674  'disabled' => true,
5675  ],
5676  ],
5677  ],
5678  ],
5679  ],
5680  ],
5681  ],
5682  ],
5683  ];
5684  }
5685 
5692  public function migrateOptionsOfTypeGroup(array $input, array $expected)
5693  {
5694  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
5695  }
5696 
5701  {
5702  return [
5703  'showIconTable enabled selectIcons field wizard' => [
5704  [
5705  'aTable' => [
5706  'columns' => [
5707  'aField' => [
5708  'config' => [
5709  'type' => 'select',
5710  'renderType' => 'selectSingle',
5711  'showIconTable' => true,
5712  ],
5713  ],
5714  ],
5715  ],
5716  ],
5717  [
5718  'aTable' => [
5719  'columns' => [
5720  'aField' => [
5721  'config' => [
5722  'type' => 'select',
5723  'renderType' => 'selectSingle',
5724  'fieldWizard' => [
5725  'selectIcons' => [
5726  'disabled' => false,
5727  ],
5728  ],
5729  ],
5730  ],
5731  ],
5732  ],
5733  ],
5734  ],
5735  'selicon_cols is removed' => [
5736  [
5737  'aTable' => [
5738  'columns' => [
5739  'aField' => [
5740  'config' => [
5741  'type' => 'select',
5742  'renderType' => 'selectSingle',
5743  'selicon_cols' => 4,
5744  ],
5745  ],
5746  ],
5747  ],
5748  ],
5749  [
5750  'aTable' => [
5751  'columns' => [
5752  'aField' => [
5753  'config' => [
5754  'type' => 'select',
5755  'renderType' => 'selectSingle',
5756  ],
5757  ],
5758  ],
5759  ],
5760  ],
5761  ],
5762  ];
5763  }
5764 
5771  public function migrateSelectSingleShowIconTable(array $input, array $expected)
5772  {
5773  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
5774  }
5775 
5780  {
5781  return [
5782  'enableZoom is removed' => [
5783  [
5784  'aTable' => [
5785  'columns' => [
5786  'aField' => [
5787  'config' => [
5788  'type' => 'imageManipulation',
5789  'enableZoom' => true,
5790  ],
5791  ],
5792  ],
5793  ],
5794  ],
5795  [
5796  'aTable' => [
5797  'columns' => [
5798  'aField' => [
5799  'config' => [
5800  'type' => 'imageManipulation',
5801  ],
5802  ],
5803  ],
5804  ],
5805  ],
5806  ],
5807  'ratios migration ignored if cropVariants config is present' => [
5808  [
5809  'aTable' => [
5810  'columns' => [
5811  'aField' => [
5812  'config' => [
5813  'type' => 'imageManipulation',
5814  'ratios' => [
5815  4 / 3 => '4:3',
5816  ],
5817  'cropVariants' => [],
5818  ],
5819  ],
5820  ],
5821  ],
5822  ],
5823  [
5824  'aTable' => [
5825  'columns' => [
5826  'aField' => [
5827  'config' => [
5828  'type' => 'imageManipulation',
5829  'cropVariants' => [],
5830  ],
5831  ],
5832  ],
5833  ],
5834  ],
5835  ],
5836  'ratios are migrated' => [
5837  [
5838  'aTable' => [
5839  'columns' => [
5840  'aField' => [
5841  'config' => [
5842  'type' => 'imageManipulation',
5843  'ratios' => [
5844  '1.3333333333333333' => '4:3',
5845  '1.7777777777777777' => '16:9',
5846  '1' => '1:1',
5847  ],
5848  ],
5849  ],
5850  ],
5851  ],
5852  ],
5853  [
5854  'aTable' => [
5855  'columns' => [
5856  'aField' => [
5857  'config' => [
5858  'type' => 'imageManipulation',
5859  'cropVariants' => [
5860  'default' => [
5861  'title' => 'LLL:EXT:lang/Resources/Private/Language/locallang_wizards.xlf:imwizard.crop_variant.default',
5862  'allowedAspectRatios' => [
5863  '1.33' => [
5864  'title' => '4:3',
5865  'value' => 4 / 3,
5866  ],
5867  '1.78' => [
5868  'title' => '16:9',
5869  'value' => 16 / 9,
5870  ],
5871  '1.00' => [
5872  'title' => '1:1',
5873  'value' => 1.0,
5874  ],
5875  ],
5876  'cropArea' => [
5877  'x' => 0.0,
5878  'y' => 0.0,
5879  'width' => 1.0,
5880  'height' => 1.0,
5881  ],
5882  ],
5883  ],
5884  ],
5885  ],
5886  ],
5887  ],
5888  ],
5889  ],
5890  ];
5891  }
5892 
5899  public function migrateImageManipulationRatios(array $input, array $expected)
5900  {
5901  $this->assertEquals($expected, (new TcaMigration())->migrate($input));
5902  }
5903 
5908  {
5909  $input = [
5910  'aTable' => [
5911  'columns' => [
5912  'foo' => [
5913  'config' => [
5914  'type' => 'input'
5915  ],
5916  ],
5917  ],
5918  ],
5919  ];
5920 
5921  $expected = [
5922  'aTable' => [
5923  'columns' => [
5924  'foo' => [
5925  'config' => [
5926  'type' => 'input'
5927  ],
5928  ],
5929  ],
5930  ],
5931  ];
5932 
5933  $subject = new TcaMigration();
5934  $this->assertEquals($expected, $subject->migrate($input));
5935  }
5936 
5941  {
5942  $input = [
5943  'aTable' => [
5944  'columns' => [
5945  'foo' => [
5946  'config' => [
5947  'type' => 'input',
5948  'renderType' => 'fooBar'
5949  ],
5950  ],
5951  ],
5952  ],
5953  ];
5954 
5955  $expected = [
5956  'aTable' => [
5957  'columns' => [
5958  'foo' => [
5959  'config' => [
5960  'type' => 'input',
5961  'renderType' => 'fooBar'
5962  ],
5963  ],
5964  ],
5965  ],
5966  ];
5967 
5968  $subject = new TcaMigration();
5969  $this->assertEquals($expected, $subject->migrate($input));
5970  }
5971 
5976  {
5977  $input = [
5978  'aTable' => [
5979  'columns' => [
5980  'foo' => [
5981  'config' => [
5982  'type' => 'input',
5983  'renderType' => 'inputDateTime'
5984  ],
5985  ],
5986  ],
5987  ],
5988  ];
5989 
5990  $expected = [
5991  'aTable' => [
5992  'columns' => [
5993  'foo' => [
5994  'config' => [
5995  'type' => 'input',
5996  'renderType' => 'inputDateTime'
5997  ],
5998  ],
5999  ],
6000  ],
6001  ];
6002 
6003  $subject = new TcaMigration();
6004  $this->assertEquals($expected, $subject->migrate($input));
6005  }
6006 
6011  {
6012  $input = [
6013  'aTable' => [
6014  'columns' => [
6015  'foo' => [
6016  'config' => [
6017  'type' => 'input',
6018  'renderType' => 'inputDateTime',
6019  'max' => 42,
6020  ],
6021  ],
6022  ],
6023  ],
6024  ];
6025 
6026  $expected = [
6027  'aTable' => [
6028  'columns' => [
6029  'foo' => [
6030  'config' => [
6031  'type' => 'input',
6032  'renderType' => 'inputDateTime',
6033  ],
6034  ],
6035  ],
6036  ],
6037  ];
6038 
6039  $subject = new TcaMigration();
6040  $this->assertEquals($expected, $subject->migrate($input));
6041  }
6042 
6047  {
6048  $input = [
6049  'aTable' => [
6050  'columns' => [
6051  'foo' => [
6052  'config' => [
6053  'type' => 'input',
6054  'max' => 42,
6055  ],
6056  ],
6057  ],
6058  ],
6059  ];
6060 
6061  $expected = [
6062  'aTable' => [
6063  'columns' => [
6064  'foo' => [
6065  'config' => [
6066  'type' => 'input',
6067  'max' => 42,
6068  ],
6069  ],
6070  ],
6071  ],
6072  ];
6073 
6074  $subject = new TcaMigration();
6075  $this->assertEquals($expected, $subject->migrate($input));
6076  }
6077 
6082  {
6083  $input = [
6084  'aTable' => [
6085  'columns' => [
6086  'foo' => [
6087  'config' => [
6088  'type' => 'input',
6089  'renderType' => 'fooBar',
6090  'max' => 42,
6091  ],
6092  ],
6093  ],
6094  ],
6095  ];
6096 
6097  $expected = [
6098  'aTable' => [
6099  'columns' => [
6100  'foo' => [
6101  'config' => [
6102  'type' => 'input',
6103  'renderType' => 'fooBar',
6104  'max' => 42,
6105  ],
6106  ],
6107  ],
6108  ],
6109  ];
6110 
6111  $subject = new TcaMigration();
6112  $this->assertEquals($expected, $subject->migrate($input));
6113  }
6114 
6119  {
6120  $input = [
6121  'aTable' => [
6122  'columns' => [
6123  'foo' => [
6124  'config' => [
6125  'type' => 'inline',
6126  'foreign_types' => [
6127  '0' => [
6128  'showitem' => 'bar'
6129  ],
6130  ],
6131  ],
6132  ],
6133  ],
6134  ],
6135  ];
6136  $expected = [
6137  'aTable' => [
6138  'columns' => [
6139  'foo' => [
6140  'config' => [
6141  'type' => 'inline',
6142  'overrideChildTca' => [
6143  'types' => [
6144  '0' => [
6145  'showitem' => 'bar'
6146  ],
6147  ],
6148  ],
6149  ],
6150  ],
6151  ],
6152  ],
6153  ];
6154  $subject = new TcaMigration();
6155  $this->assertEquals($expected, $subject->migrate($input));
6156  }
6157 
6162  {
6163  $input = [
6164  'aTable' => [
6165  'columns' => [
6166  'foo' => [
6167  'config' => [
6168  'type' => 'inline',
6169  'foreign_types' => [
6170  '0' => [
6171  // This does NOT override existing 'showitem'='baz' below
6172  'showitem' => 'doesNotOverrideExistingSetting',
6173  // This is added to existing types 0 below
6174  'bitmask_value_field' => 42,
6175  ],
6176  'otherType' => [
6177  'showitem' => 'aField',
6178  ],
6179  ],
6180  'overrideChildTca' => [
6181  'types' => [
6182  '0' => [
6183  'showitem' => 'baz'
6184  ],
6185  ],
6186  ],
6187  ],
6188  ],
6189  ],
6190  ],
6191  ];
6192  $expected = [
6193  'aTable' => [
6194  'columns' => [
6195  'foo' => [
6196  'config' => [
6197  'type' => 'inline',
6198  'overrideChildTca' => [
6199  'types' => [
6200  '0' => [
6201  'showitem' => 'baz',
6202  'bitmask_value_field' => 42,
6203  ],
6204  'otherType' => [
6205  'showitem' => 'aField',
6206  ],
6207  ],
6208  ],
6209  ],
6210  ],
6211  ],
6212  ],
6213  ];
6214  $subject = new TcaMigration();
6215  $this->assertEquals($expected, $subject->migrate($input));
6216  }
6217 
6222  {
6223  $input = [
6224  'aTable' => [
6225  'columns' => [
6226  'foo' => [
6227  'config' => [
6228  'type' => 'inline',
6229  'foreign_record_defaults' => [
6230  'aField' => 'doesNotOverrideExistingOverrideChildTcaDefault',
6231  'bField' => 'aDefault',
6232  ],
6233  'overrideChildTca' => [
6234  'columns' => [
6235  'aField' => [
6236  'config' => [
6237  'default' => 'aDefault'
6238  ],
6239  ],
6240  'cField' => [
6241  'config' => [
6242  'default' => 'aDefault'
6243  ],
6244  ],
6245  ],
6246  ],
6247  ],
6248  ],
6249  ],
6250  ],
6251  ];
6252  $expected = [
6253  'aTable' => [
6254  'columns' => [
6255  'foo' => [
6256  'config' => [
6257  'type' => 'inline',
6258  'overrideChildTca' => [
6259  'columns' => [
6260  'aField' => [
6261  'config' => [
6262  'default' => 'aDefault'
6263  ],
6264  ],
6265  'bField' => [
6266  'config' => [
6267  'default' => 'aDefault'
6268  ],
6269  ],
6270  'cField' => [
6271  'config' => [
6272  'default' => 'aDefault'
6273  ],
6274  ],
6275  ],
6276  ],
6277  ],
6278  ],
6279  ],
6280  ],
6281  ];
6282  $subject = new TcaMigration();
6283  $this->assertEquals($expected, $subject->migrate($input));
6284  }
6285 
6290  {
6291  $input = [
6292  'aTable' => [
6293  'columns' => [
6294  'foo' => [
6295  'config' => [
6296  'type' => 'inline',
6297  'foreign_selector' => 'uid_local',
6298  'foreign_selector_fieldTcaOverride' => [
6299  'label' => 'aDifferentLabel',
6300  'config' => [
6301  'aGivenSetting' => 'overrideValue',
6302  'aNewSetting' => 'anotherNewValue',
6303  'anExistingSettingInOverrideChildTca' => 'doesNotOverrideExistingOverrideChildTcaDefault',
6304  'appearance' => [
6305  'elementBrowserType' => 'file',
6306  'elementBrowserAllowed' => 'jpg,png'
6307  ],
6308  ],
6309  ],
6310  'overrideChildTca' => [
6311  'columns' => [
6312  'uid_local' => [
6313  'config' => [
6314  'anExistingSettingInOverrideChildTca' => 'notOverridenByOldSetting',
6315  ],
6316  ],
6317  ],
6318  ],
6319  ],
6320  ],
6321  ],
6322  ],
6323  ];
6324  $expected = [
6325  'aTable' => [
6326  'columns' => [
6327  'foo' => [
6328  'config' => [
6329  'type' => 'inline',
6330  'foreign_selector' => 'uid_local',
6331  'overrideChildTca' => [
6332  'columns' => [
6333  'uid_local' => [
6334  'label' => 'aDifferentLabel',
6335  'config' => [
6336  'anExistingSettingInOverrideChildTca' => 'notOverridenByOldSetting',
6337  'aGivenSetting' => 'overrideValue',
6338  'aNewSetting' => 'anotherNewValue',
6339  'appearance' => [
6340  'elementBrowserType' => 'file',
6341  'elementBrowserAllowed' => 'jpg,png'
6342  ],
6343  ],
6344  ],
6345  ],
6346  ],
6347  ],
6348  ],
6349  ],
6350  ],
6351  ];
6352  $subject = new TcaMigration();
6353  $this->assertEquals($expected, $subject->migrate($input));
6354  }
6355 
6360  {
6361  $input = [
6362  'aTable' => [
6363  'types' => [
6364  'textmedia' => [
6365  'columnsOverrides' => [
6366  'assets' => [
6367  'config' => [
6368  'type' => 'inline',
6369  'foreign_selector' => 'uid_local',
6370  'foreign_types' => [
6371  '0' => [
6372  'showitem' => 'bar'
6373  ],
6374  ],
6375  'foreign_selector_fieldTcaOverride' => [
6376  'label' => 'aDifferentLabel',
6377  'config' => [
6378  'aGivenSetting' => 'overrideValue',
6379  'aNewSetting' => 'anotherNewValue',
6380  'appearance' => [
6381  'elementBrowserType' => 'file',
6382  'elementBrowserAllowed' => 'jpg,png'
6383  ],
6384  ],
6385  ],
6386  'foreign_record_defaults' => [
6387  'aField' => 'overriddenValue',
6388  'bField' => 'overriddenValue',
6389  ],
6390  ],
6391  ],
6392  ],
6393  ],
6394  ],
6395  ],
6396  ];
6397  $expected = [
6398  'aTable' => [
6399  'types' => [
6400  'textmedia' => [
6401  'columnsOverrides' => [
6402  'assets' => [
6403  'config' => [
6404  'type' => 'inline',
6405  'foreign_selector' => 'uid_local',
6406  'overrideChildTca' => [
6407  'types' => [
6408  '0' => [
6409  'showitem' => 'bar'
6410  ],
6411  ],
6412  'columns' => [
6413  'uid_local' => [
6414  'label' => 'aDifferentLabel',
6415  'config' => [
6416  'aGivenSetting' => 'overrideValue',
6417  'aNewSetting' => 'anotherNewValue',
6418  'appearance' => [
6419  'elementBrowserType' => 'file',
6420  'elementBrowserAllowed' => 'jpg,png'
6421  ],
6422  ],
6423  ],
6424  'aField' => [
6425  'config' => [
6426  'default' => 'overriddenValue'
6427  ],
6428  ],
6429  'bField' => [
6430  'config' => [
6431  'default' => 'overriddenValue'
6432  ],
6433  ],
6434  ],
6435  ],
6436  ],
6437  ],
6438  ],
6439  ],
6440  ],
6441  ],
6442  ];
6443  $subject = new TcaMigration();
6444  $this->assertEquals($expected, $subject->migrate($input));
6445  }
6446 
6451  {
6452  $input = [
6453  'aTable' => [
6454  'columns' => [
6455  'assets' => [
6456  'config' => [
6457  'type' => 'inline',
6458  'foreign_selector' => 'uid_local',
6459  'overrideChildTca' => [
6460  'types' => [
6461  '0' => [
6462  'showitem' => 'foo'
6463  ],
6464  ],
6465  'columns' => [
6466  'uid_local' => [
6467  'label' => 'Label',
6468  'config' => [
6469  'appearance' => [
6470  'elementBrowserType' => 'file',
6471  'elementBrowserAllowed' => 'jpg,png'
6472  ],
6473  ],
6474  ],
6475  ],
6476  ],
6477  ],
6478  ],
6479  ],
6480  'types' => [
6481  'textmedia' => [
6482  'columnsOverrides' => [
6483  'assets' => [
6484  'config' => [
6485  'foreign_types' => [
6486  '0' => [
6487  'showitem' => 'bar'
6488  ],
6489  ],
6490  'foreign_selector_fieldTcaOverride' => [
6491  'config' => [
6492  'appearance' => [
6493  'elementBrowserAllowed' => 'jpg,png'
6494  ],
6495  ],
6496  ],
6497  ],
6498  ],
6499  ],
6500  ],
6501  ],
6502  ],
6503  ];
6504  $expected = [
6505  'aTable' => [
6506  'columns' => [
6507  'assets' => [
6508  'config' => [
6509  'type' => 'inline',
6510  'foreign_selector' => 'uid_local',
6511  'overrideChildTca' => [
6512  'types' => [
6513  '0' => [
6514  'showitem' => 'foo'
6515  ],
6516  ],
6517  'columns' => [
6518  'uid_local' => [
6519  'label' => 'Label',
6520  'config' => [
6521  'appearance' => [
6522  'elementBrowserType' => 'file',
6523  'elementBrowserAllowed' => 'jpg,png'
6524  ],
6525  ],
6526  ],
6527  ],
6528  ],
6529  ],
6530  ],
6531  ],
6532  'types' => [
6533  'textmedia' => [
6534  'columnsOverrides' => [
6535  'assets' => [
6536  'config' => [
6537  'overrideChildTca' => [
6538  'types' => [
6539  '0' => [
6540  'showitem' => 'bar'
6541  ],
6542  ],
6543  'columns' => [
6544  'uid_local' => [
6545  'config' => [
6546  'appearance' => [
6547  'elementBrowserAllowed' => 'jpg,png'
6548  ],
6549  ],
6550  ],
6551  ],
6552  ],
6553  ],
6554  ],
6555  ],
6556  ],
6557  ],
6558  ],
6559  ];
6560  $subject = new TcaMigration();
6561  $this->assertEquals($expected, $subject->migrate($input));
6562  }
6563 }
migrateMovesTypeInputDateTimeToRenderType(array $input, array $expected)
migrateMovesWizardsWithEnableByTypeConfigToColumnsOverrides(array $input, array $expected)
migrateWorkspaceSettings(array $givenConfig, array $expectedConfig)
migrateMovesFullScreenRichtextWizardToFieldControl(array $input, array $expected)
migrateMovesAddWizardToFieldControl(array $input, array $expected)
migrateMovesRequestUpdateCtrlFieldToColumns(array $input, array $expected)
migrateMovesLinkWizardToRenderTypeWithFieldControl(array $input, array $expected)
migrateTranslationTable(array $givenConfig, array $expectedConfig)
migrateMovesListWizardToFieldControl(array $input, array $expected)
migrateSelectSingleShowIconTable(array $input, array $expected)
migrateRewritesColorpickerWizard(array $input, array $expected)
migrateMovesSelectWizardToValuePicker(array $input, array $expected)
migrateImageManipulationRatios(array $input, array $expected)
migrateShowIfRTESetting(array $givenConfig, array $expectedConfig)
migrateSetsShowIconTableIfMissing(array $givenConfig, array $expectedConfig)
migrateMovesEditWizardToFieldControl(array $input, array $expected)
migrateInlineLocalizationMode(array $givenConfig, array $expectedConfig)
migrateRemovesRteTransformOptions(array $givenConfig, array $expectedConfig)
migrateL10nModeDefinitions(array $givenConfig, array $expectedConfig)
migrateMovesTableWizardToRenderType(array $input, array $expected)
migrateMovesLastDefaultExtrasValues(array $input, array $expected)
migrateTsTemplateSoftReferences(array $givenConfig, array $expectedConfig)
migrateMovesSliderWizardToSliderConfiguration(array $input, array $expected)
migratePageLocalizationDefinitions(array $givenConfig, array $expectedConfig)