/** * Pre build TCA information for the given model * * @param string $modelClassName * * @return array */ public function getTcaInformation($modelClassName) { $modelInformation = ClassNamingUtility::explodeObjectModelName($modelClassName); $extensionName = GeneralUtility::camelCaseToLowerCaseUnderscored($modelInformation['extensionName']); $reflectionTableName = ModelUtility::getTableNameByModelReflectionAnnotation($modelClassName); $tableName = ModelUtility::getTableNameByModelName($modelClassName); $searchFields = []; $customFields = $this->getCustomModelFieldTca($modelClassName, $searchFields); if ($reflectionTableName !== '') { $customConfiguration = ['columns' => $customFields]; $base = is_array($GLOBALS['TCA'][$reflectionTableName]) ? $GLOBALS['TCA'][$reflectionTableName] : []; return ArrayUtility::mergeRecursiveDistinct($base, $customConfiguration); } $excludes = ModelUtility::getSmartExcludesByModelName($modelClassName); $dataSet = $this->getDataSet(); $dataImplementations = $dataSet->getAllAndExcludeList($excludes); $baseTca = $dataSet->getTcaInformation($dataImplementations, $tableName); // title $fields = array_keys($customFields); $labelField = 'title'; if (!in_array($labelField, $fields)) { $labelField = $fields[0]; } try { TranslateUtility::assureLabel($tableName, $extensionName); } catch (\Exception $ex) { // @todo handle } if (!is_array($baseTca['columns'])) { $baseTca['columns'] = []; } $baseTca['columns'] = ArrayUtility::mergeRecursiveDistinct($baseTca['columns'], $customFields); // items $showitem = $fields; if (!in_array('language', $excludes)) { $showitem[] = '--palette--;LLL:EXT:lang/locallang_general.xlf:LGL.language;language'; } if (!in_array('workspaces', $excludes)) { $baseTca['ctrl']['shadowColumnsForNewPlaceholders'] .= ',' . $labelField; } if (GeneralUtility::compat_version('7.0')) { $languagePrefix = 'LLL:EXT:frontend/Resources/Private/Language/'; } else { $languagePrefix = 'LLL:EXT:cms/'; } if (!in_array('enableFields', $excludes)) { $showitem[] = '--div--;' . $languagePrefix . 'locallang_ttc.xlf:tabs.access'; $showitem[] = '--palette--;' . $languagePrefix . 'locallang_tca.xlf:pages.palettes.access;access'; } $showitem[] = '--div--;' . $languagePrefix . 'locallang_ttc.xlf:tabs.extended'; $overrideTca = ['ctrl' => ['title' => TranslateUtility::getLllOrHelpMessage($tableName, $extensionName), 'label' => $labelField, 'tstamp' => 'tstamp', 'crdate' => 'crdate', 'cruser_id' => 'cruser_id', 'dividers2tabs' => true, 'sortby' => 'sorting', 'delete' => 'deleted', 'searchFields' => implode(',', $searchFields), 'iconfile' => IconUtility::getByModelName($modelClassName, GeneralUtility::compat_version('7.0'))], 'interface' => ['showRecordFieldList' => implode(',', array_keys($baseTca['columns']))], 'types' => ['1' => ['showitem' => implode(',', $showitem)]], 'palettes' => ['access' => ['showitem' => 'starttime, endtime, --linebreak--, hidden, editlock, --linebreak--, fe_group']]]; return ArrayUtility::mergeRecursiveDistinct($baseTca, $overrideTca); }
/** * Run the loading process for the ext_tables.php file * * @param Loader $loader * @param array $loaderInformation * * @return NULL */ public function loadExtensionTables(Loader $loader, array $loaderInformation) { foreach (array_keys($loaderInformation) as $key) { $label = TranslateUtility::getLllOrHelpMessage('plugin.' . $key, $loader->getExtensionKey()); ExtensionUtility::registerPlugin($loader->getExtensionKey(), $key, $label); } }
/** * Run the loading process for the ext_tables.php file * * @param Loader $loader * @param array $loaderInformation * * @return NULL */ public function loadExtensionTables(Loader $loader, array $loaderInformation) { if (!$loaderInformation) { return null; } $createWizardHeader = []; $predefinedWizards = ['common', 'special', 'forms', 'plugins']; // Add the divider $GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items'][] = [TranslateUtility::getLllString('tt_content.' . $loader->getExtensionKey() . '.header', $loader->getExtensionKey()), '--div--']; foreach ($loaderInformation as $e => $config) { SmartObjectRegister::register($config['modelClass']); $typeKey = $loader->getExtensionKey() . '_' . $e; ExtensionManagementUtility::addPlugin([TranslateUtility::getLllOrHelpMessage('content.element.' . $e, $loader->getExtensionKey()), $typeKey, $config['iconExt']], 'CType'); if (!isset($GLOBALS['TCA']['tt_content']['types'][$typeKey]['showitem'])) { $baseTcaConfiguration = $this->wrapDefaultTcaConfiguration($config['fieldConfiguration'], (bool) $config['noHeader']); if (ExtensionManagementUtility::isLoaded('gridelements')) { $baseTcaConfiguration .= ',tx_gridelements_container,tx_gridelements_columns'; } $GLOBALS['TCA']['tt_content']['types'][$typeKey]['showitem'] = $baseTcaConfiguration; } // RTE if (isset($config['richTextFields']) && is_array($config['richTextFields']) && $config['richTextFields']) { foreach ($config['richTextFields'] as $field) { $GLOBALS['TCA']['tt_content']['types'][$typeKey]['columnsOverrides'][$field] = ['config' => ['type' => 'text'], 'defaultExtras' => 'richtext:rte_transform[flag=rte_enabled|mode=ts_css]']; } } IconUtility::addTcaTypeIcon('tt_content', $typeKey, $config['icon']); $tabName = $config['tabInformation'] ? $config['tabInformation'] : $loader->getExtensionKey(); if (!in_array($tabName, $predefinedWizards) && !in_array($tabName, $createWizardHeader)) { $createWizardHeader[] = $tabName; } ExtensionManagementUtility::addPageTSConfig(' mod.wizards.newContentElement.wizardItems.' . $tabName . '.elements.' . $typeKey . ' { icon = ' . $config['icon'] . ' title = ' . TranslateUtility::getLllOrHelpMessage('wizard.' . $e, $loader->getExtensionKey()) . ' description = ' . TranslateUtility::getLllOrHelpMessage('wizard.' . $e . '.description', $loader->getExtensionKey()) . ' tt_content_defValues { CType = ' . $typeKey . ' } } mod.wizards.newContentElement.wizardItems.' . $tabName . '.show := addToList(' . $typeKey . ')'); $cObjectConfiguration = ['extensionKey' => $loader->getExtensionKey(), 'backendTemplatePath' => 'EXT:' . $loader->getExtensionKey() . '/Resources/Private/Templates/Content/' . $config['model'] . 'Backend.html', 'modelClass' => $config['modelClass']]; $GLOBALS['TYPO3_CONF_VARS']['AUTOLOADER']['ContentObject'][$loader->getExtensionKey() . '_' . GeneralUtility::camelCaseToLowerCaseUnderscored($config['model'])] = $cObjectConfiguration; } if ($createWizardHeader) { foreach ($createWizardHeader as $element) { ExtensionManagementUtility::addPageTSConfig(' mod.wizards.newContentElement.wizardItems.' . $element . ' { show = * header = ' . TranslateUtility::getLllOrHelpMessage('wizard.' . $element . '.header', $loader->getExtensionKey()) . ' }'); } } return null; }