/** * Prepare the content object loader * * @param Loader $loader * @param int $type * * @return array */ public function prepareLoader(Loader $loader, $type) { $loaderInformation = []; $modelPath = ExtensionManagementUtility::extPath($loader->getExtensionKey()) . 'Classes/Domain/Model/Content/'; $models = FileUtility::getBaseFilesInDir($modelPath, 'php'); if ($models) { TranslateUtility::assureLabel('tt_content.' . $loader->getExtensionKey() . '.header', $loader->getExtensionKey(), $loader->getExtensionKey() . ' (Header)'); } foreach ($models as $model) { $key = GeneralUtility::camelCaseToLowerCaseUnderscored($model); $className = ClassNamingUtility::getFqnByPath($loader->getVendorName(), $loader->getExtensionKey(), 'Domain/Model/Content/' . $model); if (!$loader->isInstantiableClass($className)) { continue; } $fieldConfiguration = []; $richTextFields = []; $noHeader = $this->isTaggedWithNoHeader($className); // create labels in the ext_tables run, to have a valid DatabaseConnection if ($type === LoaderInterface::EXT_TABLES) { TranslateUtility::assureLabel('wizard.' . $key, $loader->getExtensionKey(), $key . ' (Title)'); TranslateUtility::assureLabel('wizard.' . $key . '.description', $loader->getExtensionKey(), $key . ' (Description)'); $fieldConfiguration = $this->getClassPropertiesInLowerCaseUnderscored($className); $defaultFields = $this->getDefaultTcaFields(null, $noHeader); $fieldConfiguration = array_diff($fieldConfiguration, $defaultFields); // RTE manipulation $classReflection = ReflectionUtility::createReflectionClass($className); foreach ($classReflection->getProperties() as $property) { /** @var $property PropertyReflection */ if ($property->isTaggedWith('enableRichText')) { $search = array_search(GeneralUtility::camelCaseToLowerCaseUnderscored($property->getName()), $fieldConfiguration); if ($search !== false) { if (GeneralUtility::compat_version('7.0')) { $richTextFields[] = $fieldConfiguration[$search]; } else { $fieldConfiguration[$search] .= ';;;richtext:rte_transform[flag=rte_enabled|mode=ts_css]'; } } } } } $entry = ['fieldConfiguration' => implode(',', $fieldConfiguration), 'richTextFields' => $richTextFields, 'modelClass' => $className, 'model' => $model, 'icon' => IconUtility::getByModelName($className), 'iconExt' => IconUtility::getByModelName($className, true), 'noHeader' => $noHeader, 'tabInformation' => ReflectionUtility::getFirstTagValue($className, 'wizardTab')]; SmartObjectRegister::register($entry['modelClass']); $loaderInformation[$key] = $entry; } $this->checkAndCreateDummyTemplates($loaderInformation, $loader); return $loaderInformation; }
/** * 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); }