2 namespace TYPO3\CMS\Core\Tree\TableConfiguration;
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 $unselectableUids = array();
49 if ($dataProvider === null) {
50 $dataProvider = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Tree\TableConfiguration\DatabaseTreeDataProvider::class);
52 if (isset($tcaConfiguration[
'foreign_table'])) {
53 $tableName = $tcaConfiguration[
'foreign_table'];
54 $dataProvider->setTableName($tableName);
55 if ($tableName == $table) {
56 $unselectableUids[] = $currentValue[
'uid'];
59 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: "foreign_table" not set', 1288215888);
61 if (isset($tcaConfiguration[
'foreign_label'])) {
62 $dataProvider->setLabelField($tcaConfiguration[
'foreign_label']);
64 $dataProvider->setLabelField(
$GLOBALS[
'TCA'][$tableName][
'ctrl'][
'label']);
66 $dataProvider->setTreeId(md5($table .
'|' . $field));
67 $dataProvider->setSelectedList($currentValue);
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 $dataProvider->setItemUnselectableList($unselectableUids);
94 }
elseif ($tcaConfiguration[
'internal_type'] ===
'file' && $dataProvider === null) {
96 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: tree for "internal_type=file" not implemented yet', 1288215891);
97 }
elseif ($dataProvider === null) {
98 throw new \InvalidArgumentException(
'TCA Tree configuration is invalid: tree for "internal_type=' . $tcaConfiguration[
'internal_type'] .
'" not implemented yet', 1288215892);
100 return $dataProvider;