/** * 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; }
/** * @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); } } }
/** * @return array */ protected function getInstalledFluxPackages() { return array_keys(Core::getRegisteredPackagesForAutoForms()); }
/** * @test */ public function canRegisterAndUnregisterPackagesForFormGeneration() { $fakePackage = 'MyFakeVendor.MyFakePackage'; Core::registerFluxDomainFormPackage($fakePackage); $this->assertArrayHasKey($fakePackage, Core::getRegisteredPackagesForAutoForms()); Core::unregisterFluxDomainFormPackage($fakePackage); $this->assertArrayNotHasKey($fakePackage, Core::getRegisteredPackagesForAutoForms()); }