/** * @test */ public function testForReservedWord() { self::assertTrue(\EBT\ExtensionBuilder\Domain\Validator\ExtensionValidator::isReservedWord('DATABASE')); }
/** * Generate the code files according to the transferred JSON configuration. * * @throws \Exception * @return array (status => message) */ protected function rpcActionSave() { try { $extensionBuildConfiguration = $this->configurationManager->getConfigurationFromModeler(); GeneralUtility::devLog('Modeler Configuration', 'extension_builder', 0, $extensionBuildConfiguration); $validationConfigurationResult = $this->extensionValidator->validateConfigurationFormat($extensionBuildConfiguration); if (!empty($validationConfigurationResult['warnings'])) { $confirmationRequired = $this->handleValidationWarnings($validationConfigurationResult['warnings']); if (!empty($confirmationRequired)) { return $confirmationRequired; } } if (!empty($validationConfigurationResult['errors'])) { $errorMessage = ''; /** @var $exception \Exception */ foreach ($validationConfigurationResult['errors'] as $exception) { $errorMessage .= '<br />' . $exception->getMessage(); } throw new \Exception($errorMessage); } $extension = $this->extensionSchemaBuilder->build($extensionBuildConfiguration); } catch (\Exception $e) { throw $e; } // Validate the extension $validationResult = $this->extensionValidator->isValid($extension); if (!empty($validationResult['errors'])) { $errorMessage = ''; /** @var $exception \Exception */ foreach ($validationResult['errors'] as $exception) { $errorMessage .= '<br />' . $exception->getMessage(); } throw new \Exception($errorMessage); } if (!empty($validationResult['warnings'])) { $confirmationRequired = $this->handleValidationWarnings($validationResult['warnings']); if (!empty($confirmationRequired)) { return $confirmationRequired; } } $extensionDirectory = $extension->getExtensionDir(); if (!is_dir($extensionDirectory)) { GeneralUtility::mkdir($extensionDirectory); } else { if ($this->settings['extConf']['backupExtension'] == 1) { try { RoundTrip::backupExtension($extension, $this->settings['extConf']['backupDir']); } catch (\Exception $e) { throw $e; } } $extensionSettings = $this->configurationManager->getExtensionSettings($extension->getExtensionKey()); if ($this->settings['extConf']['enableRoundtrip'] == 1) { if (empty($extensionSettings)) { // no config file in an existing extension! // this would result in a total overwrite so we create one and give a warning $this->configurationManager->createInitialSettingsFile($extension, $this->settings['codeTemplateRootPath']); return array('warning' => "<span class='error'>Roundtrip is enabled but no configuration file was found.</span><br />This might happen if you use the extension builder the first time for this extension. <br />A settings file was generated in <br /><b>typo3conf/ext/" . $extension->getExtensionKey() . '/Configuration/ExtensionBuilder/settings.yaml.</b><br />Configure the overwrite settings, then save again.'); } try { RoundTrip::prepareExtensionForRoundtrip($extension); } catch (\Exception $e) { throw $e; } } else { if (!is_array($extensionSettings['ignoreWarnings']) || !in_array(\EBT\ExtensionBuilder\Domain\Validator\ExtensionValidator::EXTENSION_DIR_EXISTS, $extensionSettings['ignoreWarnings'])) { $confirmationRequired = $this->handleValidationWarnings(array(new \EBT\ExtensionBuilder\Domain\Exception\ExtensionException("This action will overwrite previously saved content!\n(Enable the roundtrip feature to avoid this warning).", \EBT\ExtensionBuilder\Domain\Validator\ExtensionValidator::EXTENSION_DIR_EXISTS))); if (!empty($confirmationRequired)) { return $confirmationRequired; } } } } try { $this->fileGenerator->build($extension); $this->extensionInstallationStatus->setExtension($extension); $message = '<p>The Extension was saved</p>' . $this->extensionInstallationStatus->getStatusMessage(); if ($extension->getNeedsUploadFolder()) { $message .= '<br />Notice: File upload is not yet implemented.'; } $result = array('success' => $message); if ($this->extensionInstallationStatus->isDbUpdateNeeded()) { $result['confirmUpdate'] = true; } } catch (\Exception $e) { throw $e; } $this->extensionRepository->saveExtensionConfiguration($extension); return $result; }