33 public static function getDataProvider(array $tcaConfiguration, $table, $field, $currentValue)
37 if (!isset($tcaConfiguration[
'treeConfig']) || !is_array($tcaConfiguration[
'treeConfig'])) {
38 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: "treeConfig" array is missing', 1288215890);
41 if (!empty($tcaConfiguration[
'treeConfig'][
'dataProvider'])) {
42 $dataProvider = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($tcaConfiguration[
'treeConfig'][
'dataProvider'], $tcaConfiguration, $table, $field, $currentValue);
44 if (!isset($tcaConfiguration[
'internal_type'])) {
45 $tcaConfiguration[
'internal_type'] =
'db';
47 if ($tcaConfiguration[
'internal_type'] ===
'db') {
48 if ($dataProvider ===
null) {
49 $dataProvider = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\
TYPO3\CMS\Core\Tree\TableConfiguration\DatabaseTreeDataProvider::class);
51 if (isset($tcaConfiguration[
'foreign_table'])) {
52 $tableName = $tcaConfiguration[
'foreign_table'];
53 $dataProvider->setTableName($tableName);
54 if ($tableName == $table) {
56 $unselectableUids = [$currentValue[
'uid']];
57 $dataProvider->setItemUnselectableList($unselectableUids);
60 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: "foreign_table" not set', 1288215888);
62 if (isset($tcaConfiguration[
'foreign_label'])) {
63 $dataProvider->setLabelField($tcaConfiguration[
'foreign_label']);
65 $dataProvider->setLabelField(
$GLOBALS[
'TCA'][$tableName][
'ctrl'][
'label'] ??
'');
67 $dataProvider->setTreeId(md5($table .
'|' . $field));
69 $treeConfiguration = $tcaConfiguration[
'treeConfig'];
70 if (isset($treeConfiguration[
'rootUid'])) {
71 $dataProvider->setRootUid((
int)$treeConfiguration[
'rootUid']);
73 if (isset($treeConfiguration[
'appearance'][
'expandAll'])) {
74 $dataProvider->setExpandAll((
bool)$treeConfiguration[
'appearance'][
'expandAll']);
76 if (isset($treeConfiguration[
'appearance'][
'maxLevels'])) {
77 $dataProvider->setLevelMaximum((
int)$treeConfiguration[
'appearance'][
'maxLevels']);
79 if (isset($treeConfiguration[
'appearance'][
'nonSelectableLevels'])) {
80 $dataProvider->setNonSelectableLevelList($treeConfiguration[
'appearance'][
'nonSelectableLevels']);
81 } elseif (isset($treeConfiguration[
'rootUid'])) {
82 $dataProvider->setNonSelectableLevelList(
'');
84 if (isset($treeConfiguration[
'childrenField'])) {
86 $dataProvider->setLookupField($treeConfiguration[
'childrenField']);
87 } elseif (isset($treeConfiguration[
'parentField'])) {
89 $dataProvider->setLookupField($treeConfiguration[
'parentField']);
91 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: neither "childrenField" nor "parentField" is set', 1288215889);
93 } elseif ($tcaConfiguration[
'internal_type'] ===
'file' && $dataProvider ===
null) {
95 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: tree for "internal_type=file" not implemented yet', 1288215891);
96 } elseif ($dataProvider ===
null) {
97 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: tree for "internal_type=' . $tcaConfiguration[
'internal_type'] .
'" not implemented yet', 1288215892);