示例#1
0
 /**
  * generate a docComment for class files. Add a license header if none found
  * @param \EBT\ExtensionBuilder\Domain\Model\ClassObject\ClassObject $classObject
  *
  * @return void;
  */
 protected function addLicenseHeader($classObject)
 {
     $comments = $classObject->getComments();
     $needsLicenseHeader = true;
     foreach ($comments as $comment) {
         if (strpos($comment, 'license information') !== false) {
             $needsLicenseHeader = false;
         }
     }
     $extensionSettings = $this->extension->getSettings();
     if ($needsLicenseHeader && empty($extensionSettings['skipDocComment'])) {
         $licenseHeader = $this->renderTemplate('Partials/Classes/licenseHeader.phpt', array('extension' => $this->extension));
         $classObject->addComment($licenseHeader);
     }
 }
 /**
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @param array $propertyConfiguration
  * @return void
  */
 protected function setExtensionProperties(&$extension, $propertyConfiguration)
 {
     // name
     $extension->setName(trim($propertyConfiguration['name']));
     // description
     $extension->setDescription($propertyConfiguration['description']);
     // extensionKey
     $extension->setExtensionKey(trim($propertyConfiguration['extensionKey']));
     // vendorName
     $extension->setVendorName(trim($propertyConfiguration['vendorName']));
     if (!empty($propertyConfiguration['emConf']['sourceLanguage'])) {
         $extension->setSourceLanguage($propertyConfiguration['emConf']['sourceLanguage']);
     }
     if ($propertyConfiguration['emConf']['disableVersioning']) {
         $extension->setSupportVersioning(false);
     }
     if ($propertyConfiguration['emConf']['disableLocalization']) {
         $extension->setSupportLocalization(false);
     }
     if (!empty($propertyConfiguration['emConf']['skipGenerateDocumentationTemplate'])) {
         $extension->setGenerateDocumentationTemplate(false);
     }
     // various extension properties
     $extension->setVersion($propertyConfiguration['emConf']['version']);
     if (!empty($propertyConfiguration['emConf']['dependsOn'])) {
         $dependencies = array();
         $lines = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(LF, $propertyConfiguration['emConf']['dependsOn']);
         foreach ($lines as $line) {
             if (strpos($line, '=>')) {
                 list($extensionKey, $version) = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode('=>', $line);
                 $dependencies[$extensionKey] = $version;
             }
         }
         $extension->setDependencies($dependencies);
     }
     if (!empty($propertyConfiguration['emConf']['targetVersion'])) {
         $extension->setTargetVersion(floatval($propertyConfiguration['emConf']['targetVersion']));
     }
     if (!empty($propertyConfiguration['emConf']['custom_category'])) {
         $category = $propertyConfiguration['emConf']['custom_category'];
     } else {
         $category = $propertyConfiguration['emConf']['category'];
     }
     $extension->setCategory($category);
     // state
     $state = 0;
     switch ($propertyConfiguration['emConf']['state']) {
         case 'alpha':
             $state = \EBT\ExtensionBuilder\Domain\Model\Extension::STATE_ALPHA;
             break;
         case 'beta':
             $state = \EBT\ExtensionBuilder\Domain\Model\Extension::STATE_BETA;
             break;
         case 'stable':
             $state = \EBT\ExtensionBuilder\Domain\Model\Extension::STATE_STABLE;
             break;
         case 'experimental':
             $state = \EBT\ExtensionBuilder\Domain\Model\Extension::STATE_EXPERIMENTAL;
             break;
         case 'test':
             $state = \EBT\ExtensionBuilder\Domain\Model\Extension::STATE_TEST;
             break;
     }
     $extension->setState($state);
     if (!empty($propertyConfiguration['originalExtensionKey'])) {
         // handle renaming of extensions
         // original extensionKey
         $extension->setOriginalExtensionKey($propertyConfiguration['originalExtensionKey']);
         \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('Extension setOriginalExtensionKey:' . $extension->getOriginalExtensionKey(), 'extbase', 0, $propertyConfiguration);
     }
     if (!empty($propertyConfiguration['originalExtensionKey']) && $extension->getOriginalExtensionKey() != $extension->getExtensionKey()) {
         $settings = $this->configurationManager->getExtensionSettings($extension->getOriginalExtensionKey());
         // if an extension was renamed, a new extension dir is created and we
         // have to copy the old settings file to the new extension dir
         copy($this->configurationManager->getSettingsFile($extension->getOriginalExtensionKey()), $this->configurationManager->getSettingsFile($extension->getExtensionKey()));
     } else {
         $settings = $this->configurationManager->getExtensionSettings($extension->getExtensionKey());
     }
     if (!empty($settings)) {
         $extension->setSettings($settings);
         \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('Extension settings:' . $extension->getExtensionKey(), 'extbase', 0, $extension->getSettings());
     }
 }
示例#3
0
 /**
  * generate all domainObject related
  * files like PHP class files, templates etc.
  *
  * @throws \Exception
  */
 protected function generateDomainObjectRelatedFiles()
 {
     if (count($this->extension->getDomainObjects()) > 0) {
         $this->classBuilder->initialize($this->extension);
         // Generate Domain Model
         try {
             $domainModelDirectory = 'Classes/Domain/Model/';
             $this->mkdir_deep($this->extensionDirectory, $domainModelDirectory);
             $domainRepositoryDirectory = 'Classes/Domain/Repository/';
             $this->mkdir_deep($this->extensionDirectory, $domainRepositoryDirectory);
             $this->mkdir_deep($this->extensionDirectory, 'Tests/Unit/Domain/Model');
             $domainModelTestsDirectory = $this->extensionDirectory . 'Tests/Unit/Domain/Model/';
             $this->mkdir_deep($this->extensionDirectory, 'Tests/Unit/Controller');
             $crudEnabledControllerTestsDirectory = $this->extensionDirectory . 'Tests/Unit/Controller/';
             foreach ($this->extension->getDomainObjects() as $domainObject) {
                 /**
                  * @var \EBT\ExtensionBuilder\Domain\Model\DomainObject $domainObject
                  */
                 $destinationFile = $domainModelDirectory . $domainObject->getName() . '.php';
                 if ($this->fileShouldBeMerged($destinationFile)) {
                     $mergeWithExistingClass = true;
                 } else {
                     $mergeWithExistingClass = false;
                 }
                 $fileContents = $this->generateDomainObjectCode($domainObject, $mergeWithExistingClass);
                 $this->writeFile($this->extensionDirectory . $destinationFile, $fileContents);
                 GeneralUtility::devlog('Generated ' . $domainObject->getName() . '.php', 'extension_builder', 0);
                 $this->extension->setMD5Hash($this->extensionDirectory . $destinationFile);
                 if ($domainObject->isAggregateRoot()) {
                     $iconFileName = 'aggregate_root.gif';
                 } elseif ($domainObject->isEntity()) {
                     $iconFileName = 'entity.gif';
                 } else {
                     $iconFileName = 'value_object.gif';
                 }
                 $this->upload_copy_move(ExtensionManagementUtility::extPath('extension_builder') . 'Resources/Private/Icons/' . $iconFileName, $this->iconsDirectory . $domainObject->getDatabaseTableName() . '.gif');
                 if ($domainObject->isAggregateRoot()) {
                     $destinationFile = $domainRepositoryDirectory . $domainObject->getName() . 'Repository.php';
                     if ($this->fileShouldBeMerged($destinationFile)) {
                         $mergeWithExistingClass = true;
                     } else {
                         $mergeWithExistingClass = false;
                     }
                     $fileContents = $this->generateDomainRepositoryCode($domainObject, $mergeWithExistingClass);
                     $this->writeFile($this->extensionDirectory . $destinationFile, $fileContents);
                     GeneralUtility::devlog('Generated ' . $domainObject->getName() . 'Repository.php', 'extension_builder', 0);
                     $this->extension->setMD5Hash($this->extensionDirectory . $destinationFile);
                 }
                 // Generate basic UnitTests
                 $fileContents = $this->generateDomainModelTests($domainObject);
                 $this->writeFile($domainModelTestsDirectory . $domainObject->getName() . 'Test.php', $fileContents);
             }
         } catch (\Exception $e) {
             throw new \Exception('Could not generate domain model, error: ' . $e->getMessage());
         }
         // Generate Action Controller
         try {
             $this->mkdir_deep($this->extensionDirectory, 'Classes/Controller');
             $controllerDirectory = 'Classes/Controller/';
             foreach ($this->extension->getDomainObjectsForWhichAControllerShouldBeBuilt() as $domainObject) {
                 $destinationFile = $controllerDirectory . $domainObject->getName() . 'Controller.php';
                 if ($this->fileShouldBeMerged($destinationFile)) {
                     $mergeWithExistingClass = true;
                 } else {
                     $mergeWithExistingClass = false;
                 }
                 $fileContents = $this->generateActionControllerCode($domainObject, $mergeWithExistingClass);
                 $this->writeFile($this->extensionDirectory . $destinationFile, $fileContents);
                 GeneralUtility::devlog('Generated ' . $domainObject->getName() . 'Controller.php', 'extension_builder', 0);
                 $this->extension->setMD5Hash($this->extensionDirectory . $destinationFile);
                 // Generate basic UnitTests
                 $fileContents = $this->generateControllerTests($domainObject->getName() . 'Controller', $domainObject);
                 $this->writeFile($crudEnabledControllerTestsDirectory . $domainObject->getName() . 'ControllerTest.php', $fileContents);
             }
         } catch (\Exception $e) {
             throw new \Exception('Could not generate action controller, error: ' . $e->getMessage());
         }
         // Generate Domain Templates
         try {
             if ($this->extension->getPlugins()) {
                 $this->generateTemplateFiles();
             }
             if ($this->extension->getBackendModules()) {
                 $this->generateTemplateFiles('Backend/');
             }
         } catch (\Exception $e) {
             throw new \Exception('Could not generate domain templates, error: ' . $e->getMessage());
         }
         try {
             $settings = $this->extension->getSettings();
         } catch (\Exception $e) {
             throw new \Exception('Could not generate ext_autoload.php, error: ' . $e->getMessage());
         }
     } else {
         GeneralUtility::devlog('No domainObjects in this extension', 'extension_builder', 3, (array) $this->extension);
     }
 }
示例#4
0
 /**
  *
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  *
  * @return void
  */
 public function initialize(Model\Extension $extension)
 {
     $this->extension = $extension;
     $settings = $extension->getSettings();
     $this->settings = $settings['classBuilder'];
     $this->extensionDirectory = $this->extension->getExtensionDir();
 }
 /**
  *
  * @param \EBT\ExtensionBuilder\Service\FileGenerator $fileGenerator
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @param boolean roundtrip enabled?
  *
  * @return void
  */
 public function initialize(FileGenerator $fileGenerator, Model\Extension $extension, $roundTripEnabled)
 {
     $this->fileGenerator = $fileGenerator;
     $this->extension = $extension;
     $settings = $extension->getSettings();
     if ($roundTripEnabled) {
         $this->roundTripService->initialize($this->extension);
         \EBT\ExtensionBuilder\Parser\AutoLoader::register();
     }
     $this->settings = $settings['classBuilder'];
     $this->extensionDirectory = $this->extension->getExtensionDir();
 }
 /**
  * Validate the given extension
  *
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @return array[]
  */
 public function isValid($extension)
 {
     $extensionSettings = $extension->getSettings();
     GeneralUtility::devLog('isValid: settings', 'extension_builder', 0, $extension->getSettings());
     if (isset($extensionSettings['ignoreWarnings'])) {
         $this->warningsToIgnore = $extensionSettings['ignoreWarnings'];
     }
     $this->validationResult = array('errors' => array(), 'warnings' => array());
     $this->validateExtensionKey($extension->getExtensionKey());
     $this->checkExistingExtensions($extension);
     $this->validatePlugins($extension);
     $this->validateBackendModules($extension);
     $this->validateDomainObjects($extension);
     if (!empty($this->warningsToIgnore)) {
         $warningsToKeep = array();
         foreach ($this->validationResult['warnings'] as $warning) {
             /* @var ExtensionException $warning */
             GeneralUtility::devLog('warning: ' . $warning->getCode(), 'extension_builder', 0, $this->warningsToIgnore);
             if (!in_array($warning->getCode(), $this->warningsToIgnore)) {
                 $warningsToKeep[] = $warning;
             }
         }
         $this->validationResult['warnings'] = $warningsToKeep;
     }
     return $this->validationResult;
 }
示例#7
0
 /**
  * finds a related overwrite setting to a path
  * and returns the overWrite setting
  * -1 for do not create at all
  * 0  for overwrite
  * 1  for merge (if possible)
  * 2  for keep existing file
  *
  * @param string $path of the file to get the settings for
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @return int overWriteSetting
  */
 public static function getOverWriteSettingForPath($path, $extension)
 {
     $map = array('skip' => -1, 'merge' => 1, 'keep' => 2);
     $settings = $extension->getSettings();
     if (!is_array($settings)) {
         throw new \Exception('overWrite settings could not be parsed');
     }
     if (strpos($path, $extension->getExtensionDir()) === 0) {
         $path = str_replace($extension->getExtensionDir(), '', $path);
     }
     $pathParts = explode('/', $path);
     $overWriteSettings = $settings['overwriteSettings'];
     foreach ($pathParts as $pathPart) {
         if (isset($overWriteSettings[$pathPart]) && is_array($overWriteSettings[$pathPart])) {
             // step one level deeper
             $overWriteSettings = $overWriteSettings[$pathPart];
         } else {
             return $map[$overWriteSettings[$pathPart]];
         }
     }
     return 0;
 }