49 $this->testFilesToDelete = array();
50 $this->backUpPackageManager = ExtensionManagementUtilityAccessibleProxy::getPackageManager();
56 foreach ($this->testFilesToDelete as $absoluteFileName) {
59 if (file_exists(PATH_site .
'typo3temp/test_ext/')) {
62 ExtensionManagementUtilityAccessibleProxy::setPackageManager($this->backUpPackageManager);
63 ExtensionManagementUtilityAccessibleProxy::setCacheManager(NULL);
64 $GLOBALS[
'TYPO3_LOADED_EXT'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($this->backUpPackageManager);
76 $className =
'ExtensionManagementUtilityAccessibleProxy';
77 if (!class_exists(__NAMESPACE__ .
'\\' . $className, FALSE)) {
79 'namespace ' . __NAMESPACE__ .
';' .
80 'class ' . $className .
' extends \\TYPO3\\CMS\\Core\\Utility\\ExtensionManagementUtility {' .
81 ' static public function setCacheManager(\TYPO3\CMS\Core\Cache\CacheManager $cacheManager = NULL) {'.
82 ' static::$cacheManager = $cacheManager;'.
84 ' public static function getPackageManager() {' .
85 ' return static::$packageManager;' .
87 ' public static function createTypo3LoadedExtensionInformationArray() {' .
88 ' return parent::createTypo3LoadedExtensionInformationArray();' .
90 ' public static function getTypo3LoadedExtensionInformationCacheIdentifier() {' .
91 ' return parent::getTypo3LoadedExtensionInformationCacheIdentifier();' .
93 ' public static function getExtLocalconfCacheIdentifier() {' .
94 ' return parent::getExtLocalconfCacheIdentifier();' .
96 ' public static function loadSingleExtLocalconfFiles() {' .
97 ' return parent::loadSingleExtLocalconfFiles();' .
99 ' public static function getBaseTcaCacheIdentifier() {' .
100 ' return parent::getBaseTcaCacheIdentifier();' .
102 ' public static function resetExtTablesWasReadFromCacheOnceBoolean() {' .
103 ' self::$extTablesWasReadFromCacheOnce = FALSE;' .
105 ' public static function createExtLocalconfCacheEntry() {' .
106 ' return parent::createExtLocalconfCacheEntry();' .
108 ' public static function createExtTablesCacheEntry() {' .
109 ' return parent::createExtTablesCacheEntry();' .
111 ' public static function getExtTablesCacheIdentifier() {' .
112 ' return parent::getExtTablesCacheIdentifier();' .
114 ' public static function buildBaseTcaFromSingleFiles() {' .
115 ' $GLOBALS[\'TCA\'] = array();' .
117 ' public static function emitTcaIsBeingBuiltSignal(array $tca) {' .
119 ' public static function removeDuplicatesForInsertion($insertionList, $list = \'\') {' .
120 ' return parent::removeDuplicatesForInsertion($insertionList, $list);' .
133 $packagePath = PATH_site .
'typo3temp/test_ext/' . $packageKey .
'/';
135 $package = $this->getMockBuilder(
'TYPO3\\CMS\\Core\\Package\\Package')
136 ->disableOriginalConstructor()
137 ->setMethods($packageMethods)
139 $packageManager = $this->getMock(
140 'TYPO3\\CMS\\Core\\Package\\PackageManager',
141 array(
'isPackageActive',
'getPackage',
'getActivePackages')
143 $package->expects($this->any())
144 ->method(
'getPackagePath')
145 ->will($this->returnValue($packagePath));
146 $package->expects($this->any())
147 ->method(
'getPackageKey')
148 ->will($this->returnValue($packageKey));
149 $packageManager->expects($this->any())
150 ->method(
'isPackageActive')
151 ->will($this->returnValueMap(array(
153 array($packageKey, TRUE)
155 $packageManager->expects($this->any())
156 ->method(
'getPackage')
157 ->with($this->equalTo($packageKey))
158 ->will($this->returnValue($package));
159 $packageManager->expects($this->any())
160 ->method(
'getActivePackages')
161 ->will($this->returnValue(array($packageKey => $package)));
162 return $packageManager;
199 $packageManager = $this->getMock(
'TYPO3\\CMS\\Core\\Package\\PackageManager', array(
'isPackageActive'));
200 $packageManager->expects($this->once())
201 ->method(
'isPackageActive')
202 ->with($this->equalTo($packageName))
203 ->will($this->returnValue(FALSE));
212 $package = $this->getMockBuilder(
'TYPO3\\CMS\\Core\\Package\\Package')
213 ->disableOriginalConstructor()
214 ->setMethods(array(
'getPackagePath'))
216 $packageManager = $this->getMock(
'TYPO3\\CMS\\Core\\Package\\PackageManager', array(
'isPackageActive',
'getPackage'));
217 $package->expects($this->once())
218 ->method(
'getPackagePath')
219 ->will($this->returnValue(PATH_site .
'foo/'));
220 $packageManager->expects($this->once())
221 ->method(
'isPackageActive')
222 ->with($this->equalTo(
'foo'))
223 ->will($this->returnValue(TRUE));
224 $packageManager->expects($this->once())
225 ->method(
'getPackage')
227 ->will($this->returnValue($package));
243 $tca[$table] = array();
244 $tca[$table][
'columns'] = array(
248 $tca[$table][
'types'] = array(
249 'typeA' => array(
'showitem' =>
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, fieldD, fieldD1'),
250 'typeB' => array(
'showitem' =>
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, fieldD, fieldD1'),
251 'typeC' => array(
'showitem' =>
'fieldC;;paletteD')
253 $tca[$table][
'palettes'] = array(
254 'paletteA' => array(
'showitem' =>
'fieldX, fieldX1, fieldY'),
255 'paletteB' => array(
'showitem' =>
'fieldX, fieldX1, fieldY'),
256 'paletteC' => array(
'showitem' =>
'fieldX, fieldX1, fieldY'),
257 'paletteD' => array(
'showitem' =>
'fieldX, fieldX1, fieldY')
269 'Without underscores' => array(
273 'With underscores' => array(
274 'this_is_a_test_extension',
275 'tx_thisisatestextension' 277 'With user prefix and without underscores' => array(
281 'With user prefix and with underscores' => array(
308 $extensionKey =
'tt_news' . $uniqueSuffix;
309 $extensionPrefix =
'tx_ttnews' . $uniqueSuffix;
310 $package = $this->getMockBuilder(
'TYPO3\\CMS\\Core\\Package\\Package')
311 ->disableOriginalConstructor()
312 ->setMethods(array(
'getPackageKey'))
314 $package->expects($this->exactly(2))
315 ->method(
'getPackageKey')
316 ->will($this->returnValue($extensionKey));
317 $packageManager = $this->getMock(
'TYPO3\\CMS\\Core\\Package\\PackageManager', array(
'getActivePackages'));
318 $packageManager->expects($this->once())
319 ->method(
'getActivePackages')
320 ->will($this->returnValue(array($extensionKey => $package)));
332 $extensionKey =
'kickstarter' . $uniqueSuffix;
333 $extensionPrefix =
'tx_kickstarter' . $uniqueSuffix;
334 $package = $this->getMockBuilder(
'TYPO3\\CMS\\Core\\Package\\Package')
335 ->disableOriginalConstructor()
336 ->setMethods(array(
'getPackageKey'))
338 $package->expects($this->exactly(2))
339 ->method(
'getPackageKey')
340 ->will($this->returnValue($extensionKey));
341 $packageManager = $this->getMock(
'TYPO3\\CMS\\Core\\Package\\PackageManager', array(
'getActivePackages'));
342 $packageManager->expects($this->once())
343 ->method(
'getActivePackages')
344 ->will($this->returnValue(array($extensionKey => $package)));
356 $extensionKey =
'unloadedextension' . $uniqueSuffix;
357 $extensionPrefix =
'tx_unloadedextension' . $uniqueSuffix;
375 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, newA, newB, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeA'][
'showitem']);
377 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, newA, newB, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeB'][
'showitem']);
391 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, newA, newB, fieldC1, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeA'][
'showitem']);
393 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, newA, newB, fieldC1, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeB'][
'showitem']);
407 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, newA, newB, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeA'][
'showitem']);
409 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeB'][
'showitem']);
423 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, newA, newB, fieldC1, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeA'][
'showitem']);
425 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, fieldD, fieldD1',
$GLOBALS[
'TCA'][$table][
'types'][
'typeB'][
'showitem']);
437 $this->assertEquals(
'fieldA, fieldB, fieldC;labelC;paletteC;specialC, fieldC1, fieldD, fieldD1, field',
$GLOBALS[
'TCA'][$table][
'types'][
'typeA'][
'showitem']);
449 $typesBefore =
$GLOBALS[
'TCA'][$table][
'types'];
451 $this->assertEquals($typesBefore,
$GLOBALS[
'TCA'][$table][
'types'],
'It\'s wrong that the "types" array changes here - the replaced field is only on palettes');
453 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
454 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
456 $this->assertEquals(
'fieldZ, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
457 $this->assertEquals(
'fieldZ, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
466 $typesBefore =
$GLOBALS[
'TCA'][$table][
'types'];
468 $this->assertEquals($typesBefore,
$GLOBALS[
'TCA'][$table][
'types'],
'It\'s wrong that the "types" array changes here - the replaced field is only on palettes');
470 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
471 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
473 $this->assertEquals(
'fieldX;;foo;;, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
474 $this->assertEquals(
'fieldX;;foo;;, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
490 $this->assertEquals(
'fieldX, fieldX1, newA, newB, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
503 $this->assertEquals(
'fieldX, newA, newB, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
516 $this->assertEquals(
'fieldX, fieldX1, fieldY, newA, newB',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
525 'field_b, field_d, field_c',
526 'field_a, field_b, field_c',
529 'with linebreaks' => array(
530 'field_b, --linebreak--, field_d, --linebreak--, field_c',
531 'field_a, field_b, field_c',
532 '--linebreak--, field_d, --linebreak--' 534 'with linebreaks in list and insertion list' => array(
535 'field_b, --linebreak--, field_d, --linebreak--, field_c',
536 'field_a, field_b, --linebreak--, field_c',
537 '--linebreak--, field_d, --linebreak--' 539 'with configuration in list' => array(
540 'field_b, field_d, field_c;;;4-4-4',
541 'field_a, field_b;;;;2-2-2, field_c;;;;3-3-3',
544 'with configuration in list and insertion list' => array(
545 'field_b, field_d;;;3-3-3, field_c;;;4-4-4',
546 'field_a, field_b;;;;2-2-2, field_c;;;;3-3-3',
560 $result = ExtensionManagementUtilityAccessibleProxy::removeDuplicatesForInsertion($insertionList, $list);
561 $this->assertSame($expected,
$result);
574 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
575 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
576 $this->assertEquals(
'fieldX, fieldX1, newA, newB, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
577 $this->assertEquals(
'fieldX, fieldX1, newA, newB, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
590 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
591 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
592 $this->assertEquals(
'fieldX, newA, newB, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
593 $this->assertEquals(
'fieldX, newA, newB, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
606 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
607 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
608 $this->assertEquals(
'fieldX, fieldX1, fieldY, newA, newB',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
609 $this->assertEquals(
'fieldX, fieldX1, fieldY, newA, newB',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
622 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteA'][
'showitem']);
623 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteB'][
'showitem']);
624 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteC'][
'showitem']);
625 $this->assertEquals(
'fieldX, fieldX1, fieldY',
$GLOBALS[
'TCA'][$table][
'palettes'][
'paletteD'][
'showitem']);
626 $this->assertEquals(
'newA, newB, fieldX',
$GLOBALS[
'TCA'][$table][
'palettes'][
'generatedFor-fieldA'][
'showitem']);
635 'normal characters' => array(
643 'newlines with carriage return' => array(
655 'multiple commas with trailing spaces' => array(
667 $extensionManagementUtility = $this->
getAccessibleMock(
'\\TYPO3\\CMS\\Core\\Utility\\ExtensionManagementUtility', array(
'dummy'));
668 $string = $extensionManagementUtility->_call(
'executePositionedStringInsertion', $string,
'');
669 $this->assertEquals($expectedResult, $string);
733 'add at end of array' => array(
737 0 => array(
'firstElement'),
738 1 => array(
'matchMe'),
739 2 => array(
'thirdElement'),
740 3 => array(
'insertedElement')
743 'replace element' => array(
747 0 => array(
'firstElement'),
748 1 => array(
'insertedElement'),
749 2 => array(
'thirdElement')
752 'add element after' => array(
756 0 => array(
'firstElement'),
757 1 => array(
'matchMe'),
758 2 => array(
'insertedElement'),
759 3 => array(
'thirdElement')
762 'add element before' => array(
766 0 => array(
'firstElement'),
767 1 => array(
'insertedElement'),
768 2 => array(
'matchMe'),
769 3 => array(
'thirdElement')
772 'add at end if relative position was not found' => array(
776 0 => array(
'firstElement'),
777 1 => array(
'matchMe'),
778 2 => array(
'thirdElement'),
779 3 => array(
'insertedElement')
791 'testTable' => array(
793 'testField' => array(
796 '0' => array(
'firstElement'),
797 '1' => array(
'matchMe'),
798 2 => array(
'thirdElement')
806 $this->assertEquals($expectedResultArray,
$GLOBALS[
'TCA'][
'testTable'][
'columns'][
'testField'][
'config'][
'items']);
816 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
817 $mockCacheManager->expects($this->never())->method(
'getCache');
818 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
820 ExtensionManagementUtility::loadExtLocalconf(FALSE);
827 $mockCache = $this->getMock(
828 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend',
829 array(
'getIdentifier',
'set',
'get',
'getByTag',
'has',
'remove',
'flush',
'flushByTag',
'requireOnce'),
834 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
835 $mockCacheManager->expects($this->any())->method(
'getCache')->will($this->returnValue($mockCache));
836 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
837 $mockCache->expects($this->any())->method(
'has')->will($this->returnValue(TRUE));
838 $mockCache->expects($this->once())->method(
'requireOnce');
839 ExtensionManagementUtility::loadExtLocalconf(TRUE);
852 $extLocalconfLocation = $packageManager->getPackage($extensionName)->getPackagePath() .
'ext_localconf.php';
853 file_put_contents($extLocalconfLocation,
"<?php\n\nthrow new RuntimeException('', 1340559079);\n\n?>");
854 $GLOBALS[
'TYPO3_LOADED_EXT'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($packageManager);
855 ExtensionManagementUtilityAccessibleProxy::loadSingleExtLocalconfFiles();
869 'can add new main module if none exists' => array(
874 'can add new sub module if no position specified' => array(
877 'some,modules,newModule' 879 'can add new sub module to top of module' => array(
882 'newModule,some,modules' 884 'can add new sub module if bottom of module' => array(
887 'some,modules,newModule' 889 'can add new sub module before specified sub module' => array(
892 'some,newModule,modules' 894 'can add new sub module after specified sub module' => array(
897 'some,newModule,modules' 899 'can add new sub module at the bottom if specified sub module to add before does not exist' => array(
902 'some,otherModules,newModule' 904 'can add new sub module at the bottom if specified sub module to add after does not exist' => array(
907 'someOther,modules,newModule' 917 $mainModule =
'foobar';
918 $subModule =
'newModule';
920 $GLOBALS[
'TBE_MODULES'][$mainModule] = $existing;
925 $this->assertTrue(isset(
$GLOBALS[
'TBE_MODULES'][$mainModule]));
926 $this->assertEquals($expected,
$GLOBALS[
'TBE_MODULES'][$mainModule]);
938 $extLocalconfLocation = $packageManager->getPackage($extensionName)->getPackagePath() .
'ext_localconf.php';
939 $this->testFilesToDelete[] = $extLocalconfLocation;
940 $uniqueStringInLocalconf = $this->
getUniqueId(
'foo');
941 file_put_contents($extLocalconfLocation,
"<?php\n\n" . $uniqueStringInLocalconf .
"\n\n?>");
942 $GLOBALS[
'TYPO3_LOADED_EXT'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($packageManager);
943 $mockCache = $this->getMock(
944 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend',
945 array(
'getIdentifier',
'set',
'get',
'getByTag',
'has',
'remove',
'flush',
'flushByTag',
'requireOnce'),
950 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
951 $mockCacheManager->expects($this->any())->method(
'getCache')->will($this->returnValue($mockCache));
952 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
953 $mockCache->expects($this->once())->method(
'set')->with($this->anything(), $this->stringContains($uniqueStringInLocalconf), $this->anything());
954 ExtensionManagementUtilityAccessibleProxy::createExtLocalconfCacheEntry();
963 $GLOBALS[
'TYPO3_LOADED_EXT'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($packageManager);
964 $mockCache = $this->getMock(
965 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend',
966 array(
'getIdentifier',
'set',
'get',
'getByTag',
'has',
'remove',
'flush',
'flushByTag',
'requireOnce'),
971 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
972 $mockCacheManager->expects($this->any())->method(
'getCache')->will($this->returnValue($mockCache));
973 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
974 $mockCache->expects($this->once())
976 ->with($this->anything(), $this->logicalNot($this->stringContains($extensionName)), $this->anything());
977 ExtensionManagementUtilityAccessibleProxy::createExtLocalconfCacheEntry();
984 $mockCache = $this->getMock(
985 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend',
986 array(
'getIdentifier',
'set',
'get',
'getByTag',
'has',
'remove',
'flush',
'flushByTag',
'requireOnce'),
991 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
992 $mockCacheManager->expects($this->any())->method(
'getCache')->will($this->returnValue($mockCache));
993 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
994 $mockCache->expects($this->once())->method(
'set')->with($this->anything(), $this->anything(), $this->equalTo(array()));
996 ExtensionManagementUtilityAccessibleProxy::createExtLocalconfCacheEntry();
1006 $prefix =
'ext_localconf_';
1007 $identifier = ExtensionManagementUtilityAccessibleProxy::getExtLocalconfCacheIdentifier();
1008 $this->assertStringStartsWith($prefix, $identifier);
1009 $sha1 = str_replace($prefix,
'', $identifier);
1010 $this->assertEquals(40, strlen($sha1));
1021 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
1022 $mockCacheManager->expects($this->never())->method(
'getCache');
1023 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
1024 ExtensionManagementUtilityAccessibleProxy::loadBaseTca(FALSE);
1031 $mockCache = $this->getMock(
1032 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend',
1033 array(
'getIdentifier',
'set',
'get',
'getByTag',
'has',
'remove',
'flush',
'flushByTag',
'requireOnce'),
1038 $mockCacheManager = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\CacheManager', array(
'getCache'));
1039 $mockCacheManager->expects($this->any())->method(
'getCache')->will($this->returnValue($mockCache));
1040 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager);
1041 $mockCache->expects($this->any())->method(
'has')->will($this->returnValue(TRUE));
1042 $mockCache->expects($this->once())->method(
'get')->willReturn(
'<?php ' . serialize(array(
'tca' => array(),
'categoryRegistry' => \
TYPO3\CMS\Core\Category\CategoryRegistry::getInstance())) .
'?>');
1043 ExtensionManagementUtilityAccessibleProxy::loadBaseTca(TRUE);
1050 $extensionName = $this->
getUniqueId(
'test_baseTca_');
1052 $packagePath = $packageManager->getPackage($extensionName)->getPackagePath();
1056 $GLOBALS[
'TYPO3_LOADED_EXT'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($packageManager);
1058 $uniqueTableName = $this->
getUniqueId(
'table_name_');
1059 $uniqueStringInTableConfiguration = $this->
getUniqueId(
'table_configuration_');
1060 $tableConfiguration =
'<?php return array(\'foo\' => \'' . $uniqueStringInTableConfiguration .
'\'); ?>
'; 1061 file_put_contents($packagePath . 'Configuration/TCA/
' . $uniqueTableName . '.php
', $tableConfiguration); 1062 $mockCache = $this->getMock( 1063 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1064 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1069 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1070 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1071 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1072 $mockCache->expects($this->once())->method('has
')->will($this->returnValue(FALSE)); 1073 $mockCache->expects($this->once())->method('set')->with($this->anything(), $this->stringContains($uniqueStringInTableConfiguration), $this->anything()); 1074 ExtensionManagementUtility::loadBaseTca(TRUE); 1080 public function loadBaseTcaWritesCacheEntryWithNoTags() { 1081 $mockCache = $this->getMock( 1082 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1083 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1088 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1089 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1090 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1091 $mockCache->expects($this->once())->method('has
')->will($this->returnValue(FALSE)); 1092 $mockCache->expects($this->once())->method('set')->with($this->anything(), $this->anything(), $this->equalTo(array())); 1093 ExtensionManagementUtilityAccessibleProxy::loadBaseTca(); 1097 // Tests concerning getBaseTcaCacheIdentifier 1103 public function getBaseTcaCacheIdentifierCreatesSha1WithFourtyCharactersAndPrefix() { 1104 $prefix = 'tca_base_
'; 1105 $identifier = ExtensionManagementUtilityAccessibleProxy::getBaseTcaCacheIdentifier(); 1106 $this->assertStringStartsWith($prefix, $identifier); 1107 $sha1 = str_replace($prefix, '', $identifier); 1108 $this->assertEquals(40, strlen($sha1)); 1112 // Tests concerning loadExtTables 1117 public function loadExtTablesDoesNotReadFromCacheIfCachingIsDenied() { 1118 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1119 $mockCacheManager->expects($this->never())->method('getCache
'); 1120 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1121 $GLOBALS['TYPO3_LOADED_EXT
'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($this->createMockPackageManagerWithMockPackage($this->getUniqueId())); 1122 ExtensionManagementUtility::loadExtLocalconf(FALSE); 1128 public function loadExtTablesRequiresCacheFileIfExistsAndCachingIsAllowed() { 1129 $mockCache = $this->getMock( 1130 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1131 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1136 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1137 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1138 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1139 $mockCache->expects($this->any())->method('has
')->will($this->returnValue(TRUE)); 1140 $mockCache->expects($this->once())->method('requireOnce
'); 1141 // Reset the internal cache access tracking variable of extMgm 1142 // This method is only in the ProxyClass! 1143 ExtensionManagementUtilityAccessibleProxy::resetExtTablesWasReadFromCacheOnceBoolean(); 1144 ExtensionManagementUtility::loadExtTables(TRUE); 1148 // Tests concerning createExtTablesCacheEntry 1153 public function createExtTablesCacheEntryWritesCacheEntryWithContentOfLoadedExtensionExtTables() { 1154 $extensionName = $this->getUniqueId('foo
'); 1155 $extTablesLocation = PATH_site . 'typo3temp/
' . $this->getUniqueId('test_ext_tables
') . '.php
'; 1156 $this->testFilesToDelete[] = $extTablesLocation; 1157 $uniqueStringInTables = $this->getUniqueId('foo
'); 1158 file_put_contents($extTablesLocation, "<?php\n\n$uniqueStringInTables\n\n?>"); 1159 $GLOBALS['TYPO3_LOADED_EXT
'] = array( 1160 $extensionName => array( 1161 'ext_tables.php
' => $extTablesLocation 1164 $mockCache = $this->getMock( 1165 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1166 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1171 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1172 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1173 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1174 $mockCache->expects($this->once())->method('set')->with($this->anything(), $this->stringContains($uniqueStringInTables), $this->anything()); 1175 ExtensionManagementUtilityAccessibleProxy::createExtTablesCacheEntry(); 1181 public function createExtTablesCacheEntryWritesCacheEntryWithExtensionContentOnlyIfExtTablesExists() { 1182 $extensionName = $this->getUniqueId('foo
'); 1183 $GLOBALS['TYPO3_LOADED_EXT
'] = array( 1184 $extensionName => array(), 1186 $mockCache = $this->getMock( 1187 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1188 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1193 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1194 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1195 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1196 $mockCache->expects($this->once()) 1198 ->with($this->anything(), $this->logicalNot($this->stringContains($extensionName)), $this->anything()); 1199 ExtensionManagementUtilityAccessibleProxy::createExtTablesCacheEntry(); 1205 public function createExtTablesCacheEntryWritesCacheEntryWithNoTags() { 1206 $mockCache = $this->getMock( 1207 'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend
', 1208 array('getIdentifier
', 'set', 'get', 'getByTag
', 'has
', 'remove', 'flush
', 'flushByTag
', 'requireOnce
'), 1213 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('getCache
')); 1214 $mockCacheManager->expects($this->any())->method('getCache
')->will($this->returnValue($mockCache)); 1215 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1216 $mockCache->expects($this->once())->method('set')->with($this->anything(), $this->anything(), $this->equalTo(array())); 1217 $GLOBALS['TYPO3_LOADED_EXT
'] = new \TYPO3\CMS\Core\Compatibility\LoadedExtensionsArray($this->createMockPackageManagerWithMockPackage($this->getUniqueId())); 1218 ExtensionManagementUtilityAccessibleProxy::createExtTablesCacheEntry(); 1222 // Tests concerning getExtTablesCacheIdentifier 1227 public function getExtTablesCacheIdentifierCreatesSha1WithFourtyCharactersAndPrefix() { 1228 $prefix = 'ext_tables_
'; 1229 $identifier = ExtensionManagementUtilityAccessibleProxy::getExtTablesCacheIdentifier(); 1230 $this->assertStringStartsWith($prefix, $identifier); 1231 $sha1 = str_replace($prefix, '', $identifier); 1232 $this->assertEquals(40, strlen($sha1)); 1236 // Tests concerning removeCacheFiles 1241 public function removeCacheFilesFlushesSystemCaches() { 1242 $mockCacheManager = $this->getMock('TYPO3\\CMS\\Core\\Cache\\CacheManager
', array('flushCachesInGroup
')); 1243 $mockCacheManager->expects($this->once())->method('flushCachesInGroup
')->with('system
'); 1244 ExtensionManagementUtilityAccessibleProxy::setCacheManager($mockCacheManager); 1245 ExtensionManagementUtility::removeCacheFiles(); 1249 // Tests concerning loadNewTcaColumnsConfigFiles 1256 public function loadNewTcaColumnsConfigFilesIncludesDefinedDynamicConfigFileIfNoColumnsExist() { 1257 $GLOBALS['TCA
'] = array( 1260 'dynamicConfigFile
' => __DIR__ . '/Fixtures/RuntimeException.php
' 1264 ExtensionManagementUtility::loadNewTcaColumnsConfigFiles(); 1270 public function loadNewTcaColumnsConfigFilesDoesNotIncludeFileIfColumnsExist() { 1271 $GLOBALS['TCA
'] = array( 1274 'dynamicConfigFile
' => __DIR__ . '/Fixtures/RuntimeException.php
' 1281 ExtensionManagementUtility::loadNewTcaColumnsConfigFiles(); 1285 // Tests concerning getExtensionVersion 1292 public function getExtensionVersionFaultyDataProvider() { 1296 array(new \stdClass()), 1306 public function getExtensionVersionForFaultyExtensionKeyThrowsException($key) { 1307 ExtensionManagementUtility::getExtensionVersion($key); 1313 public function getExtensionVersionForNotLoadedExtensionReturnsEmptyString() { 1314 ExtensionManagementUtility::clearExtensionKeyMap(); 1315 $uniqueSuffix = $this->getUniqueId('test
'); 1316 $extensionKey = 'unloadedextension
' . $uniqueSuffix; 1317 $this->assertEquals('', ExtensionManagementUtility::getExtensionVersion($extensionKey)); 1323 public function getExtensionVersionForLoadedExtensionReturnsExtensionVersion() { 1324 ExtensionManagementUtility::clearExtensionKeyMap(); 1327 'namespace ' . __NAMESPACE__ .';
' . 1329 ' public static function isLoaded() {
' . 1334 $className = __NAMESPACE__ . '\\
' . $className; 1335 ExtensionManagementUtility::clearExtensionKeyMap(); 1336 $uniqueSuffix = $this->getUniqueId('test
'); 1337 $extensionKey = 'unloadedextension
' . $uniqueSuffix; 1338 $packageMetaData = $this->getMock('TYPO3\\Flow\\Package\\MetaData
', array('getVersion
'), array($extensionKey)); 1339 $packageMetaData->expects($this->any())->method('getVersion
')->will($this->returnValue('1.2.3
')); 1340 $packageManager = $this->createMockPackageManagerWithMockPackage($extensionKey, array('getPackagePath
', 'getPackageKey
', 'getPackageMetaData
')); 1342 $package = $packageManager->getPackage($extensionKey); 1343 $package->expects($this->any()) 1344 ->method('getPackageMetaData
') 1345 ->will($this->returnValue($packageMetaData)); 1346 ExtensionManagementUtility::setPackageManager($packageManager); 1347 $this->assertEquals('1.2.3
', ExtensionManagementUtility::getExtensionVersion($extensionKey)); 1351 // Tests concerning loadExtension 1357 public function loadExtensionThrowsExceptionIfExtensionIsLoaded() { 1358 $extensionKey = $this->getUniqueId('test
'); 1359 $packageManager = $this->createMockPackageManagerWithMockPackage($extensionKey); 1360 ExtensionManagementUtility::setPackageManager($packageManager); 1361 ExtensionManagementUtility::loadExtension($extensionKey); 1365 // Tests concerning unloadExtension 1371 public function unloadExtensionThrowsExceptionIfExtensionIsNotLoaded() { 1372 $packageName = $this->getUniqueId('foo
'); 1373 $packageManager = $this->getMock('TYPO3\\CMS\\Core\\Package\\PackageManager
', array('isPackageActive
')); 1374 $packageManager->expects($this->once()) 1375 ->method('isPackageActive
') 1376 ->with($this->equalTo($packageName)) 1377 ->will($this->returnValue(FALSE)); 1378 ExtensionManagementUtility::setPackageManager($packageManager); 1379 ExtensionManagementUtility::unloadExtension($packageName); 1385 public function unloadExtensionCallsPackageManagerToDeactivatePackage() { 1386 $packageName = $this->getUniqueId('foo
'); 1387 $packageManager = $this->getMock( 1388 'TYPO3\\CMS\\Core\\Package\\PackageManager
', 1389 array('isPackageActive
', 'deactivatePackage
') 1391 $packageManager->expects($this->any()) 1392 ->method('isPackageActive
') 1393 ->will($this->returnValue(TRUE)); 1394 $packageManager->expects($this->once()) 1395 ->method('deactivatePackage
') 1396 ->with($packageName); 1397 ExtensionManagementUtility::setPackageManager($packageManager); 1398 ExtensionManagementUtility::unloadExtension($packageName); 1402 // Tests concerning makeCategorizable 1407 public function doesMakeCategorizableCallsTheCategoryRegistryWithDefaultFieldName() { 1408 $extensionKey = $this->getUniqueId('extension
'); 1409 $tableName = $this->getUniqueId('table
'); 1411 $registryMock = $this->getMock('TYPO3\\CMS\\Core\\Category\\CategoryRegistry
'); 1412 $registryMock->expects($this->once())->method('add
')->with($extensionKey, $tableName, 'categories
', array()); 1413 \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance('TYPO3\\CMS\\Core\\Category\\CategoryRegistry
', $registryMock); 1414 ExtensionManagementUtility::makeCategorizable($extensionKey, $tableName); 1420 public function doesMakeCategorizableCallsTheCategoryRegistryWithFieldName() { 1421 $extensionKey = $this->getUniqueId('extension
'); 1422 $tableName = $this->getUniqueId('table
'); 1423 $fieldName = $this->getUniqueId('field
'); 1425 $registryMock = $this->getMock('TYPO3\\CMS\\Core\\Category\\CategoryRegistry
'); 1426 $registryMock->expects($this->once())->method('add
')->with($extensionKey, $tableName, $fieldName, array()); 1427 \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance('TYPO3\\CMS\\Core\\Category\\CategoryRegistry
', $registryMock); 1428 ExtensionManagementUtility::makeCategorizable($extensionKey, $tableName, $fieldName); 1432 // Tests concerning addPlugin 1438 public function addPluginSetsTcaCorrectlyForGivenExtkeyAsParameter() { 1439 $extKey = 'indexed_search
'; 1440 $GLOBALS['TYPO3_LOADED_EXT
'] = array(); 1441 $GLOBALS['TYPO3_LOADED_EXT
'][$extKey]['ext_icon
'] = 'foo.gif
'; 1442 $expectedTCA = array( 1446 'sysext/
' . $extKey . '/foo.gif
' 1449 $GLOBALS['TCA
']['tt_content
']['columns
']['list_type
']['config
']['items
'] = array(); 1450 ExtensionManagementUtility::addPlugin(array('label
', $extKey), 'list_type
', $extKey); 1451 $this->assertEquals($expectedTCA, $GLOBALS['TCA
']['tt_content
']['columns
']['list_type
']['config
']['items
']); 1457 public function addPluginSetsTcaCorrectlyForGivenExtkeyAsGlobal() { 1458 $extKey = 'indexed_search
'; 1459 $GLOBALS['TYPO3_LOADED_EXT
'] = array(); 1460 $GLOBALS['TYPO3_LOADED_EXT
'][$extKey]['ext_icon
'] = 'foo.gif
'; 1461 $GLOBALS['_EXTKEY
'] = $extKey; 1462 $expectedTCA = array( 1466 'sysext/
' . $extKey . '/foo.gif
' 1469 $GLOBALS['TCA
']['tt_content
']['columns
']['list_type
']['config
']['items
'] = array(); 1470 ExtensionManagementUtility::addPlugin(array('label
', $extKey)); 1471 $this->assertEquals($expectedTCA, $GLOBALS['TCA
']['tt_content
']['columns
']['list_type
']['config
']['items
']); 1478 public function addPluginThrowsExceptionForMissingExtkey() { 1479 ExtensionManagementUtility::addPlugin('test
'); loadBaseTcaRequiresCacheFileIfExistsAndCachingIsAllowed()
static addFieldsToAllPalettesOfField($table, $field, $addFields, $insertionPosition='')
removeDuplicatesForInsertionRemovesDuplicatesDataProvider()
static getSingletonInstances()
extensionKeyDataProvider()
static unlink_tempfile($uploadedTempFileName)
addTcaSelectItemThrowsExceptionIfRelativeToFieldIsNotOfTypeString()
addTcaSelectItemThrowsExceptionIfFieldIsNotFoundInTca()
static mkdir_deep($directory, $deepDirectory='')
addTcaSelectItemDataProvider()
loadBaseTcaCreatesCacheFileWithContentOfAnExtensionsConfigurationTcaPhpFile()
executePositionedStringInsertionTrimsCorrectCharacters($string, $expectedResult)
getExtensionKeyByPrefixForNotLoadedExtensionReturnsFalse()
extPathAppendsScriptNameToPath()
canAddFieldsToTCATypeBeforeExistingOnes()
isLoadedReturnsTrueIfExtensionIsLoaded()
static extPath($key, $script='')
addModuleCanAddModule($position, $existing, $expected)
getExtensionKeyByPrefixForLoadedExtensionWithoutUnderscoresReturnsExtensionKey()
static clearExtensionKeyMap()
canAddFieldWithPartOfAlreadyExistingFieldname()
static setPackageManager(\TYPO3\CMS\Core\Package\PackageManager $packageManager)
getClassNamePrefixForExtensionKey($extensionName, $expectedPrefix)
static rmdir($path, $removeNonEmpty=FALSE)
canAddFieldsToPaletteAfterExistingOnes()
addTcaSelectItemThrowsExceptionIfRelativePositionIsNotOfTypeString()
executePositionedStringInsertionTrimsCorrectCharactersDataProvider()
generateTCAForTable($table)
canAddFieldsToTCATypeAndReplaceExistingOnes()
isLoadedThrowsExceptionIfExtensionIsNotLoaded()
canAddFieldsToTCATypeAfterExistingOnes()
loadExtLocalconfDoesNotReadFromCacheIfCachingIsDenied()
createMockPackageManagerWithMockPackage($packageKey, $packageMethods=array('getPackagePath', 'getPackageKey'))
addTcaSelectItemThrowsExceptionIfRelativePositionIsNotOneOfValidKeywords()
static resetSingletonInstances(array $newSingletonInstances)
addTcaSelectItemThrowsExceptionIfTableIsNotOfTypeString()
addModulePositionTestsDataProvider()
addToAllTCAtypesReplacesExistingOnes()
static addToAllTCAtypes($table, $newFieldsString, $typeList='', $position='')
getAccessibleMock( $originalClassName, array $methods=array(), array $arguments=array(), $mockClassName='', $callOriginalConstructor=TRUE, $callOriginalClone=TRUE, $callAutoload=TRUE)
canAddFieldsToAllTCATypesAfterExistingOnes()
createAccessibleProxyClass()
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren't numeric.
static isLoaded($key, $exitOnError=FALSE)
addTcaSelectItemThrowsExceptionIfFieldIsNotOfTypeString()
createExtLocalconfCacheEntryWritesCacheEntryWithContentOfLoadedExtensionExtLocalconf()
canAddFieldsToAllPalettesOfFieldBeforeExistingOnes()
static addTcaSelectItem($table, $field, array $item, $relativeToField='', $relativePosition='')
canAddFieldsToAllPalettesOfFieldAfterExistingOnes()
static addModule($main, $sub='', $position='', $path='', $moduleConfiguration=array())
getExtensionKeyByPrefixForLoadedExtensionWithUnderscoresReturnsExtensionKey()
canAddFieldsToAllPalettesOfFieldWithoutPaletteExistingBefore()
createExtLocalconfCacheEntryWritesCacheEntryWithNoTags()
canAddFieldsToAllPalettesOfFieldAfterNotExistingOnes()
loadBaseTcaDoesNotReadFromCacheIfCachingIsDenied()
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
canAddFieldsToAllTCATypesBeforeExistingOnes()
createExtLocalconfCacheEntryWritesCacheEntryWithExtensionContentOnlyIfExtLocalconfExists()
extPathThrowsExceptionIfExtensionIsNotLoaded()
canAddFieldsToPaletteBeforeExistingOnes()
getExtLocalconfCacheIdentifierCreatesSha1WithFourtyCharactersAndPrefix()
removeDuplicatesForInsertionRemovesDuplicates($insertionList, $list, $expected)
static getExtensionKeyByPrefix($prefix)
loadExtLocalconfRequiresCacheFileIfExistsAndCachingIsAllowed()
addTcaSelectItemInsertsItemAtSpecifiedPosition($relativeToField, $relativePosition, $expectedResultArray)
isLoadedReturnsFalseIfExtensionIsNotLoadedAndExitIsDisabled()
canAddFieldsToPaletteAfterNotExistingOnes()
loadSingleExtLocalconfFilesRequiresExtLocalconfFileRegisteredInGlobalTypo3LoadedExt()
static addFieldsToPalette($table, $palette, $addFields, $insertionPosition='')