vendor/alnv/catalog-manager/library/alnv/CatalogDcExtractor.php line 528

Open in your IDE?
  1. <?php
  2. namespace CatalogManager;
  3. class CatalogDcExtractor extends CatalogController
  4. {
  5.     protected $strTable '';
  6.     protected $blnCore false;
  7.     protected $strOrderBy '';
  8.     public function __construct()
  9.     {
  10.         parent::__construct();
  11.         $this->import('Database');
  12.         $this->import('DcModifier');
  13.         $this->import('IconGetter');
  14.     }
  15.     public function initialize($strTablename)
  16.     {
  17.         $this->strTable $strTablename;
  18.         $this->blnCore Toolkit::isCoreTable($strTablename);
  19.     }
  20.     public function convertDataContainerToCatalog()
  21.     {
  22.         \Controller::loadLanguageFile($this->strTable);
  23.         \Controller::loadDataContainer($this->strTable);
  24.         $arrReturn = [];
  25.         $arrDataContainer $GLOBALS['TL_DCA'][$this->strTable];
  26.         if (!is_array($arrDataContainer)) return [];
  27.         $arrReturn $this->convertDcLabelToCatalog($arrReturn$arrDataContainer'list');
  28.         $arrReturn $this->convertDcSortingToCatalog($arrReturn$arrDataContainer'list');
  29.         $arrReturn $this->convertDcConfigToCatalog($arrReturn$arrDataContainer'config');
  30.         $arrReturn $this->convertDcOperationsToCatalog($arrReturn$arrDataContainer'list');
  31.         if ($this->blnCore) {
  32.             $arrReturn['navArea'] = '';
  33.             $arrReturn['navPosition'] = '';
  34.             $arrReturn['isBackendModule'] = '';
  35.             $arrReturn['tablename'] = $this->strTable;
  36.         }
  37.         return $arrReturn;
  38.     }
  39.     public function convertCatalogToDataContainer()
  40.     {
  41.         $this->DcModifier->initialize($this->strTable);
  42.         $arrReturn $GLOBALS['TL_DCA'][$this->strTable];
  43.         $arrCatalog $GLOBALS['TL_CATALOG_MANAGER']['CATALOG_EXTENSIONS'][$this->strTable];
  44.         if (!is_array($arrCatalog)) return [];
  45.         if (!is_array($arrReturn)) $arrReturn = [];
  46.         $arrReturn $this->convertCatalogToDcConfig($arrReturn$arrCatalog'config');
  47.         $arrReturn $this->convertCatalogToDcSorting($arrReturn$arrCatalog'list');
  48.         $arrReturn $this->convertCatalogToDcLabel($arrReturn$arrCatalog'list');
  49.         $arrReturn $this->convertCatalogToDcOperations($arrReturn$arrCatalog'list');
  50.         return $this->convertCatalogToDcFieldsAndPalettes($arrReturn$arrCatalog'fields');
  51.     }
  52.     public function extract()
  53.     {
  54.         $objModule $this->Database->prepare('SELECT * FROM tl_catalog WHERE tablename = ? LIMIT 1')->execute($this->strTable);
  55.         if ($objModule->numRows) {
  56.             $arrSorting = [
  57.                 'mode' => (int)$objModule->mode,
  58.                 'flag' => $objModule->flag,
  59.                 'fields' => Toolkit::deserialize($objModule->sortingFields)
  60.             ];
  61.             $this->extractDCASorting($arrSorting);
  62.             return null;
  63.         }
  64.         $this->loadDataContainer($this->strTable);
  65.         if ($GLOBALS['TL_DCA'][$this->strTable]['config']['dataContainer'] == 'File') {
  66.             return null;
  67.         }
  68.         if (!empty($GLOBALS['TL_DCA'][$this->strTable]['list']) && is_array($GLOBALS['TL_DCA'][$this->strTable]['list'])) {
  69.             if (!empty($GLOBALS['TL_DCA'][$this->strTable]['list']['sorting']) && is_array($GLOBALS['TL_DCA'][$this->strTable]['list']['sorting'])) {
  70.                 $arrSorting $GLOBALS['TL_DCA'][$this->strTable]['list']['sorting'];
  71.                 if (!Toolkit::isEmpty($arrSorting['mode']) && in_array($arrSorting['mode'], [56]) && empty($arrSorting['fields'])) {
  72.                     $arrSorting['fields'] = ['sorting'];
  73.                 }
  74.                 $this->extractDCASorting($arrSorting);
  75.             }
  76.         }
  77.     }
  78.     public function getOrderByStatement()
  79.     {
  80.         return $this->strOrderBy;
  81.     }
  82.     public function hasOrderByStatement()
  83.     {
  84.         return !Toolkit::isEmpty($this->strOrderBy);
  85.     }
  86.     public function setDcSortingByMode($strMode$arrCatalog = [], $arrDefaults = [])
  87.     {
  88.         $strMode = (int)$strMode;
  89.         $arrReturn = [
  90.             'mode' => $strMode ?: 0
  91.         ];
  92.         $arrCatalog['panelLayout'] = $arrCatalog['panelLayout'] ?? '';
  93.         $arrCatalog['flag'] = $arrCatalog['flag'] ?? '';
  94.         $arrCatalog['sortingFields'] = $arrCatalog['sortingFields'] ?? [];
  95.         $arrCatalog['headerFields'] = $arrCatalog['headerFields'] ?? '';
  96.         // $arrCatalog['labelFields'] = $arrCatalog['labelFields'] ?? [];
  97.         switch ($strMode) {
  98.             case 1:
  99.                 if (!Toolkit::isEmpty($arrCatalog['flag'])) {
  100.                     $arrReturn['flag'] = !Toolkit::isEmpty($arrCatalog['flag']) ? $arrCatalog['flag'] : $arrDefaults['flag'];
  101.                 }
  102.                 if (is_array($arrCatalog['sortingFields']) && !empty($arrCatalog['sortingFields'])) {
  103.                     $arrReturn['fields'] = $arrCatalog['sortingFields'];
  104.                 } else {
  105.                     $arrReturn['fields'] = $arrDefaults['fields'];
  106.                 }
  107.                 return $arrReturn;
  108.             case 2:
  109.                 $arrReturn['panelLayout'] = Toolkit::createPanelLayout($arrCatalog['panelLayout']);
  110.                 if (is_array($arrCatalog['sortingFields']) && !empty($arrCatalog['sortingFields'])) {
  111.                     $arrReturn['fields'] = $arrCatalog['sortingFields'];
  112.                 } else {
  113.                     $arrReturn['fields'] = $arrDefaults['fields'];
  114.                 }
  115.                 return $arrReturn;
  116.             case 0:
  117.             case 5:
  118.             case 3:
  119.                 return $arrReturn;
  120.             case 4:
  121.                 if (is_array($arrCatalog['sortingFields']) && !empty($arrCatalog['sortingFields'])) {
  122.                     $arrReturn['fields'] = $arrCatalog['sortingFields'];
  123.                 } else {
  124.                     $arrReturn['fields'] = $arrDefaults['fields'];
  125.                 }
  126.                 if (!Toolkit::isEmpty($arrCatalog['flag'])) {
  127.                     $arrReturn['flag'] = $arrCatalog['flag'];
  128.                 }
  129.                 /*
  130.                 if (isset($arrCatalog['labelFields']) && is_array($arrCatalog['labelFields']) && !empty($arrCatalog['labelFields'])) {
  131.                     $arrReturn['label'] = $arrCatalog['labelFields'];
  132.                 } else {
  133.                     $arrReturn['label'] = $arrDefaults['labelFields'] ?? ['id'];
  134.                 }
  135.                 */
  136.                 if (is_array($arrCatalog['headerFields']) && !empty($arrCatalog['headerFields'])) {
  137.                     $arrReturn['headerFields'] = $arrCatalog['headerFields'];
  138.                 } else {
  139.                     $arrReturn['headerFields'] = $arrDefaults['headerFields'];
  140.                 }
  141.                 break;
  142.             case 6:
  143.                 if (is_array($arrCatalog['sortingFields']) && !empty($arrCatalog['sortingFields'])) {
  144.                     $arrReturn['fields'] = $arrCatalog['sortingFields'];
  145.                 } else {
  146.                     $arrReturn['fields'] = $arrDefaults['fields'];
  147.                 }
  148.                 break;
  149.         }
  150.         return $arrReturn;
  151.     }
  152.     public function setDcLabelByMode($strMode$arrCatalog = [], $arrDefaults = [])
  153.     {
  154.         $strMode = (int)$strMode;
  155.         $arrReturn = [];
  156.         if (in_array($strMode, [0123])) {
  157.             if (is_array($arrCatalog['labelFields']) && !empty($arrCatalog['labelFields'])) {
  158.                 $arrReturn['fields'] = $arrCatalog['labelFields'];
  159.             } else {
  160.                 $arrReturn['fields'] = $arrDefaults['fields'];
  161.             }
  162.             $arrReturn['showColumns'] = $arrCatalog['showColumns'] ? true false;
  163.             if (!Toolkit::isEmpty($arrCatalog['format'])) $arrReturn['format'] = $arrCatalog['format'];
  164.             return $arrReturn;
  165.         }
  166.         if ($strMode === 4) {
  167.             return $arrReturn;
  168.         }
  169.         if ($strMode === || $strMode === 6) {
  170.             if (is_array($arrCatalog['labelFields']) && !empty($arrCatalog['labelFields'])) {
  171.                 $arrReturn['fields'] = $arrCatalog['labelFields'];
  172.             } else {
  173.                 $arrReturn['fields'] = $arrDefaults['fields'];
  174.             }
  175.             if (!Toolkit::isEmpty($arrCatalog['format'])) $arrReturn['format'] = $arrCatalog['format'];
  176.             return $arrReturn;
  177.         }
  178.         return $arrReturn;
  179.     }
  180.     protected function extractDCASorting($arrSorting)
  181.     {
  182.         $arrTemps = [];
  183.         $arrOrderBy = [];
  184.         $intFlag = (isset($arrSorting['flag']) && $arrSorting['flag']) ? (int)$arrSorting['flag'] : 1;
  185.         $arrFields = !empty($arrSorting['fields']) && is_array($arrSorting['fields']) ? $arrSorting['fields'] : [];
  186.         $strOrder $intFlag 'ASC' 'DESC';
  187.         foreach ($arrFields as $strField) {
  188.             if (in_array($strField$arrTemps)) {
  189.                 continue;
  190.             } else {
  191.                 $arrTemps[] = $strField;
  192.             }
  193.             $strUpperCaseField strtoupper($strField);
  194.             if (stripos($strUpperCaseField'ASC') || stripos($strUpperCaseField'DESC')) {
  195.                 $arrOrderBy[] = $strField;
  196.                 continue;
  197.             }
  198.             if ($this->Database->fieldExists($strField$this->strTable)) {
  199.                 $arrOrderBy[] = $strField ' ' $strOrder;
  200.             }
  201.         }
  202.         $this->strOrderBy implode(','$arrOrderBy);
  203.     }
  204.     protected function convertDcConfigToCatalog($arrReturn$arrDataContainer$strDcConfigType)
  205.     {
  206.         if ($arrDataContainer[$strDcConfigType]['enableVersioning']) {
  207.             $arrReturn['useVC'] = $arrDataContainer['config']['enableVersioning'] ? '1' '';
  208.         }
  209.         if (($arrDataContainer[$strDcConfigType]['ptable']??'')) {
  210.             $arrReturn['pTable'] = $arrDataContainer['config']['ptable'];
  211.         }
  212.         $arrDataContainer[$strDcConfigType]['ctable'] = $arrDataContainer[$strDcConfigType]['ctable'] ?? [];
  213.         if (is_array($arrDataContainer[$strDcConfigType]['ctable']) && !empty($arrDataContainer['config']['ctable'])) {
  214.             if (in_array('tl_content'$arrDataContainer[$strDcConfigType]['ctable'])) {
  215.                 $arrReturn['addContentElements'] = '1';
  216.             }
  217.             $arrReturn['cTables'] = serialize($arrDataContainer[$strDcConfigType]['ctable']);
  218.         }
  219.         return $arrReturn;
  220.     }
  221.     protected function convertDcSortingToCatalog($arrReturn$arrDataContainer$strDcConfigType)
  222.     {
  223.         if (is_array($arrDataContainer[$strDcConfigType]['sorting'])) {
  224.             if (isset($arrDataContainer[$strDcConfigType]['sorting']['mode'])) {
  225.                 $arrReturn['mode'] = $arrDataContainer[$strDcConfigType]['sorting']['mode'];
  226.             }
  227.             if (isset($arrDataContainer[$strDcConfigType]['sorting']['flag'])) {
  228.                 $arrReturn['flag'] = $arrDataContainer[$strDcConfigType]['sorting']['flag'];
  229.             }
  230.             if (isset($arrDataContainer[$strDcConfigType]['sorting']['panelLayout']) && is_string($arrDataContainer[$strDcConfigType]['sorting']['panelLayout'])) {
  231.                 $arrPanelLayout preg_split('/(,|;)/'$arrDataContainer[$strDcConfigType]['sorting']['panelLayout']);
  232.                 $arrReturn['panelLayout'] = serialize($arrPanelLayout);
  233.             }
  234.             if (is_array($arrDataContainer[$strDcConfigType]['sorting']['fields']) && !empty($arrDataContainer[$strDcConfigType]['sorting']['fields'])) {
  235.                 $arrFields = [];
  236.                 $arrSortingFields $arrDataContainer[$strDcConfigType]['sorting']['fields'];
  237.                 foreach ($arrSortingFields as $strField) {
  238.                     $strUpperCaseField strtoupper($strField);
  239.                     if (stripos($strUpperCaseField'ASC') || stripos($strUpperCaseField'DESC')) {
  240.                         $arrFieldParameter explode(' '$strField);
  241.                         if (!Toolkit::isEmpty($arrFieldParameter[0])) {
  242.                             $arrFields[] = $arrFieldParameter[0];
  243.                         }
  244.                         continue;
  245.                     }
  246.                     $arrFields[] = $strField;
  247.                 }
  248.                 $arrReturn['sortingFields'] = serialize($arrFields);
  249.             }
  250.             $arrDataContainer[$strDcConfigType]['sorting']['headerFields'] = $arrDataContainer[$strDcConfigType]['sorting']['headerFields'] ?? [];
  251.             if (is_array($arrDataContainer[$strDcConfigType]['sorting']['headerFields']) && !empty($arrDataContainer[$strDcConfigType]['sorting']['headerFields'])) {
  252.                 $arrReturn['headerFields'] = $arrDataContainer[$strDcConfigType]['sorting']['headerFields'];
  253.             }
  254.         }
  255.         return $arrReturn;
  256.     }
  257.     protected function convertDcLabelToCatalog($arrReturn$arrDataContainer$strDcConfigType)
  258.     {
  259.         if (isset($arrDataContainer[$strDcConfigType]['label']) && is_array($arrDataContainer[$strDcConfigType]['label'])) {
  260.             if (isset($arrDataContainer[$strDcConfigType]['label']['format'])) {
  261.                 $arrReturn['format'] = $arrDataContainer[$strDcConfigType]['label']['format'];
  262.             }
  263.             if (($arrDataContainer[$strDcConfigType]['label']['showColumns']??'')) {
  264.                 $arrReturn['showColumns'] = '1';
  265.             }
  266.             if (isset($arrDataContainer[$strDcConfigType]['label']['fields']) && is_array($arrDataContainer[$strDcConfigType]['label']['fields']) && !empty($arrDataContainer[$strDcConfigType]['label']['fields'])) {
  267.                 $arrReturn['labelFields'] = serialize($arrDataContainer[$strDcConfigType]['label']['fields']);
  268.             }
  269.         }
  270.         return $arrReturn;
  271.     }
  272.     protected function convertDcOperationsToCatalog($arrReturn$arrDataContainer$strDcConfigType)
  273.     {
  274.         if ($this->blnCore) {
  275.             $arrReturn['operations'] = '';
  276.             return $arrReturn;
  277.         }
  278.         if (isset($arrDataContainer[$strDcConfigType]['operations']) && is_array($arrDataContainer[$strDcConfigType]['operations'])) {
  279.             $arrOperators = [];
  280.             $arrOperatorParameter array_keys($arrDataContainer[$strDcConfigType]['operations']);
  281.             if (is_array($arrOperatorParameter) && !empty($arrOperatorParameter)) {
  282.                 foreach ($arrOperatorParameter as $strOperator) {
  283.                     if (in_array($strOperatorToolkit::$arrOperators)) {
  284.                         $arrOperators[] = $strOperator;
  285.                     }
  286.                 }
  287.                 $arrReturn['operations'] = serialize($arrOperators);
  288.             }
  289.         }
  290.         return $arrReturn;
  291.     }
  292.     protected function convertCatalogToDcConfig($arrReturn$arrCatalog$strDcConfigType)
  293.     {
  294.         if (!isset($arrReturn[$strDcConfigType])) {
  295.             $arrReturn[$strDcConfigType] = [];
  296.         }
  297.         if (!is_array($arrReturn[$strDcConfigType])) {
  298.             $arrReturn[$strDcConfigType] = [];
  299.         }
  300.         $arrConfigDc = [
  301.             '_tables' => [],
  302.             'enableVersioning' => (bool)$arrCatalog['useVC'] ?? false,
  303.             'ptable' => $arrReturn[$strDcConfigType]['ptable'] ?? '',
  304.             'ctable' => $arrReturn[$strDcConfigType]['ctable'] ?? [],
  305.             'onsubmit_callback' => is_array($arrReturn[$strDcConfigType]['onsubmit_callback']) ? $arrReturn[$strDcConfigType]['onsubmit_callback'] : []
  306.         ];
  307.         if (!Toolkit::isEmpty($arrCatalog['pTable'])) {
  308.             $arrConfigDc['ptable'] = $arrCatalog['pTable'];
  309.             if ($arrCatalog['pTable'] !== $arrConfigDc['ptable']) {
  310.                 $arrConfigDc['_tables'][] = $arrCatalog['pTable'];
  311.             }
  312.         }
  313.         if (is_array($arrCatalog['cTables']) && !empty($arrCatalog['cTables'])) {
  314.             foreach ($arrCatalog['cTables'] as $strTable) {
  315.                 if (is_array($arrConfigDc['ctable']) && !in_array($strTable$arrConfigDc['ctable'])) {
  316.                     $arrConfigDc['ctable'][] = $strTable;
  317.                     $arrConfigDc['_tables'][] = $strTable;
  318.                 }
  319.             }
  320.         }
  321.         if ($arrCatalog['addContentElements'] && is_array($arrConfigDc['ctable']) && !in_array('tl_content'$arrConfigDc['ctable'])) {
  322.             $arrConfigDc['ctable'][] = 'tl_content';
  323.             $arrConfigDc['_tables'][] = 'tl_content';
  324.         }
  325.         if ($arrCatalog['useGeoCoordinates']) {
  326.             $arrConfigDc['onsubmit_callback'][] = ['CatalogManager\DcCallbacks''generateGeoCords'];
  327.         }
  328.         $arrConfigDc['onsubmit_callback'][] = ['CatalogManager\DcCallbacks''checkForDynValues'];
  329.         foreach ($arrConfigDc as $strKey => $strValue) {
  330.             $arrReturn[$strDcConfigType][$strKey] = $strValue;
  331.         }
  332.         return $arrReturn;
  333.     }
  334.     protected function convertCatalogToDcSorting($arrReturn$arrCatalog$strDcConfigType)
  335.     {
  336.         if (!is_array($arrReturn[$strDcConfigType])) $arrReturn[$strDcConfigType] = [];
  337.         $arrDefaults = [
  338.             'flag' => $arrReturn[$strDcConfigType]['sorting']['flag'] ?? '',
  339.             'fields' => $arrReturn[$strDcConfigType]['sorting']['fields'] ?? '',
  340.             'panelLayout' => $arrReturn[$strDcConfigType]['sorting']['panelLayout'] ?? '',
  341.             'headerFields' => $arrReturn[$strDcConfigType]['sorting']['headerFields'] ?? ''
  342.         ];
  343.         $arrSortingDc $this->setDcSortingByMode((int)$arrCatalog['mode'], $arrCatalog$arrDefaults);
  344.         foreach ($arrSortingDc as $strKey => $strValue) {
  345.             $arrReturn[$strDcConfigType]['sorting'][$strKey] = $strValue;
  346.         }
  347.         return $arrReturn;
  348.     }
  349.     protected function convertCatalogToDcLabel($arrReturn$arrCatalog$strDcConfigType)
  350.     {
  351.         if (!is_array($arrReturn[$strDcConfigType])) $arrReturn[$strDcConfigType] = [];
  352.         $arrDefaults = [
  353.             'fields' => $arrReturn[$strDcConfigType]['sorting']['fields'] ?? ''
  354.         ];
  355.         $arrLabelDc $this->setDcLabelByMode((int)$arrCatalog['mode'], $arrCatalog$arrDefaults);
  356.         foreach ($arrLabelDc as $strKey => $strValue) {
  357.             $arrReturn[$strDcConfigType]['label'][$strKey] = $strValue;
  358.         }
  359.         return $arrReturn;
  360.     }
  361.     protected function convertCatalogToDcFieldsAndPalettes($arrReturn$arrCatalog$strDcConfigType)
  362.     {
  363.         $arrDcFields = [];
  364.         $blnFieldsetStart false;
  365.         $objFieldBuilder = new CatalogFieldBuilder();
  366.         $objFieldBuilder->initialize($this->strTable);
  367.         $arrFields $objFieldBuilder->getCatalogFields(truenulltrue);
  368.         $arrPaletteFields = [];
  369.         $arrFieldsetStart = [];
  370.         $arrPickedPalettes null;
  371.         if (is_array($arrFields) && !empty($arrFields)) {
  372.             foreach ($arrFields as $strFieldname => $arrField) {
  373.                 if ($arrField['type'] == 'fieldsetStart') {
  374.                     $arrPickedPalettes \StringUtil::deserialize($arrField['dcPaletteLegend']);
  375.                     $arrFieldsetStart $arrField;
  376.                     $blnFieldsetStart true;
  377.                     continue;
  378.                 }
  379.                 if ($arrField['type'] == 'fieldsetStop') {
  380.                     if (is_array($arrPickedPalettes)) $this->DcModifier->addLegendToPalette($arrPaletteFields$arrPickedPalettes$arrReturn['palettes'], $arrFieldsetStart);
  381.                     $arrFieldsetStart = [];
  382.                     $arrPaletteFields = [];
  383.                     $blnFieldsetStart false;
  384.                     $arrPickedPalettes null;
  385.                     continue;
  386.                 }
  387.                 if ($blnFieldsetStart && is_array($arrPickedPalettes)) $arrPaletteFields[] = $strFieldname;
  388.                 if (isset($arrField['dcPaletteField']) && $arrField['dcPaletteField'] && !$blnFieldsetStart) {
  389.                     $arrPickedPalettes \StringUtil::deserialize($arrField['dcPaletteField']);
  390.                     if (is_array($arrPickedPalettes)) $this->DcModifier->addFieldToPalette($arrField$arrPickedPalettes$arrReturn['palettes']);
  391.                     $arrPickedPalettes null;
  392.                 }
  393.                 if (isset($arrField['_dcFormat'])) {
  394.                     if ($arrField['_core'] ?? '') {
  395.                         $arrField['_dcFormat']['_disableFEE'] = '';
  396.                         $arrField['_dcFormat']['_placeholder'] = '';
  397.                         $arrField['_dcFormat']['_fieldname'] = $strFieldname;
  398.                         $arrField['_dcFormat']['_palette'] = 'general_legend';
  399.                         $arrField['_dcFormat']['_cssID'] = [''$strFieldname];
  400.                         $arrField['_dcFormat']['_type'] = $arrField['_dcFormat']['inputType'] ?? '';
  401.                     }
  402.                     $arrDcFields[$strFieldname] = $arrField['_dcFormat'];
  403.                 }
  404.             }
  405.         }
  406.         $arrReturn[$strDcConfigType] = $arrDcFields;
  407.         return $arrReturn;
  408.     }
  409.     protected function convertCatalogToDcOperations($arrReturn$arrCatalog$strDcConfigType)
  410.     {
  411.         $arrErrorTables = [];
  412.         $objReviseRelatedTables = new ReviseRelatedTables();
  413.         if ($objReviseRelatedTables->reviseCatalogTables($this->strTable$arrReturn['config']['ptable'], $arrReturn['config']['ctable'])) {
  414.             foreach ($objReviseRelatedTables->getErrorTables() as $strTable) {
  415.                 \Message::addError(sprintf("Table '%s' can not be used as relation. Please delete all rows or create valid pid value."$strTable));
  416.                 $arrErrorTables[] = $strTable;
  417.                 if ($strTable == $arrReturn['config']['ptable']) {
  418.                     $arrReturn['config']['ptable'] = '';
  419.                 }
  420.                 if (in_array($strTable$arrReturn['config']['ctable'])) {
  421.                     $intIndex array_search($strTable$arrReturn['config']['ctable']);
  422.                     unset($arrReturn['config']['ctable'][$intIndex]);
  423.                 }
  424.             }
  425.         }
  426.         if (!is_array($arrReturn[$strDcConfigType]['operations'])) {
  427.             $arrReturn[$strDcConfigType]['operations'] = [];
  428.         }
  429.         if (is_array($arrReturn['config']['ctable'])) {
  430.             foreach ($arrReturn['config']['ctable'] as $strTable) {
  431.                 if (is_array($arrReturn['config']['_tables']) && !in_array($strTable$arrReturn['config']['_tables'])) continue;
  432.                 $arrOperator = [];
  433.                 $strOperation sprintf('go_to_%s'$strTable);
  434.                 $arrOperator[$strOperation] = [
  435.                     'href' => sprintf('table=%s&ctlg_table=%s'$strTable$this->strTable),
  436.                     'label' => [sprintf($GLOBALS['TL_LANG']['catalog_manager']['operations']['goTo'][0], $strTable), sprintf($GLOBALS['TL_LANG']['catalog_manager']['operations']['goTo'][1], $strTable)],
  437.                     'icon' => $strTable !== 'tl_content' $this->IconGetter->setCatalogIcon($strTable) : 'articles.gif'
  438.                 ];
  439.                 array_insert($arrReturn[$strDcConfigType]['operations'], 1$arrOperator);
  440.             }
  441.         }
  442.         return $arrReturn;
  443.     }
  444. }