/** * @return void */ public function processData() { $objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); /** @var FluxService $fluxService */ $fluxService = $objectManager->get('FluidTYPO3\\Flux\\Service\\FluxService'); $fluxService->initializeObject(); /** @var DataMapFactory $dataMapFactory */ $dataMapFactory = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Mapper\\DataMapFactory'); $forms = Core::getRegisteredFormsForTables(); $models = Core::getRegisteredFormsForModelObjectClasses(); foreach ($forms as $fullTableName => $form) { $this->processFormForTable($fullTableName, $form); } foreach ($models as $modelClassName => $form) { $map = $dataMapFactory->buildDataMap($modelClassName); $fullTableName = $map->getTableName(); if (NULL === $form) { $form = $this->generateFormInstanceFromClassName($modelClassName, $fullTableName); } if (NULL === $form->getName()) { $form->setName($fullTableName); } $this->processFormForTable($fullTableName, $form); } }
/** * @return void */ public function processData() { if (TYPO3_REQUESTTYPE_INSTALL !== (TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_INSTALL)) { $objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); $objectManager->get('FluidTYPO3\\Flux\\Provider\\ProviderResolver')->loadTypoScriptConfigurationProviderInstances(); $forms = Core::getRegisteredFormsForTables(); $models = Core::getRegisteredFormsForModelObjectClasses(); $packages = array_keys(Core::getRegisteredPackagesForAutoForms()); foreach ($packages as $packageName) { list($vendorName, $extensionName) = explode('.', $packageName); $namespace = $vendorName . '\\' . $extensionName . '\\Domain\\'; $extensionKey = ExtensionNamingUtility::getExtensionKey($packageName); $folder = ExtensionManagementUtility::extPath($extensionKey, 'Classes/Domain/Form/'); $files = glob($folder . '*Form.php'); $files = FALSE === $files ? array() : $files; foreach ($files as $fileName) { $basename = pathinfo($fileName, PATHINFO_FILENAME); $formClassName = $namespace . 'Form\\' . $basename; $modelClassName = $namespace . 'Model\\' . substr($basename, 0, -4); $fullTableName = $this->resolveTableName($modelClassName); $models[$modelClassName] = $formClassName::create(); $models[$modelClassName]->setName($fullTableName); $models[$modelClassName]->setExtensionName($packageName); } } foreach ($forms as $fullTableName => $form) { $this->processFormForTable($fullTableName, $form); } foreach ($models as $modelClassName => $form) { $fullTableName = $this->resolveTableName($modelClassName); if (NULL === $form) { $form = $this->generateFormInstanceFromClassName($modelClassName, $fullTableName); } if (NULL === $form->getName()) { $form->setName($fullTableName); } $this->processFormForTable($fullTableName, $form); } } }
/** * @test */ public function canGetRegisteredFormsForModelClassNames() { $fakeClass = 'MyFakeClass'; $form = Form::create(); Core::registerFormForModelObjectClassName($fakeClass, $form); $this->assertSame($form, Core::getRegisteredFormForModelObjectClass($fakeClass)); $this->assertContains($form, Core::getRegisteredFormsForModelObjectClasses()); Core::unregisterFormForModelObjectClassName($fakeClass); }
/** * Resolves a list (array) of instances of Form implementations * from the provided package names, or all package names if empty. * * @param array $packageNames * @return Form[] */ public function resolveDomainFormClassInstancesFromPackages(array $packageNames = NULL) { $packageNames = NULL === $packageNames ? Core::getRegisteredPackagesForAutoForms() : $packageNames; $models = (array) Core::getRegisteredFormsForModelObjectClasses(); foreach ($packageNames as $packageName) { $classNames = $this->resolveClassNamesInPackageSubNamespace($packageName, 'Domain/Form', 'Form'); foreach ($classNames as $formClassName) { // convert form class name to model class name by convention $modelClassName = str_replace('\\Domain\\Form\\', '\\Domain\\Model\\', $formClassName); $modelClassName = substr($modelClassName, 0, -4); $fullTableName = $this->resolveDatabaseTableName($modelClassName); $models[$modelClassName] = $formClassName::create(); $models[$modelClassName]->setName($fullTableName); $models[$modelClassName]->setExtensionName($packageName); } } return $models; }