Esempio n. 1
0
 protected function tearDown()
 {
     if (!empty($this->extension) && $this->extension->getExtensionKey() != null) {
         GeneralUtility::rmdir($this->extension->getExtensionDir(), true);
     }
     parent::tearDown();
 }
 public function getStatusMessage()
 {
     $statusMessage = '';
     $this->checkForDbUpdate($this->extension->getExtensionKey(), $this->extension->getExtensionDir() . 'ext_tables.sql');
     if ($this->dbUpdateNeeded) {
         $statusMessage .= '<p>Database has to be updated!</p>';
         $typeInfo = array('add' => 'Add fields', 'change' => 'Change fields', 'create_table' => 'Create tables');
         $statusMessage .= '<div id="dbUpdateStatementsWrapper"><table>';
         foreach ($this->updateStatements as $type => $statements) {
             $statusMessage .= '<tr><td></td><td style="text-align:left;padding-left:15px">' . $typeInfo[$type] . ':</td></tr>';
             foreach ($statements as $key => $statement) {
                 if ($type == 'add') {
                     $statusMessage .= '<tr><td><input type="checkbox" name="dbUpdateStatements[]" value="' . $key . '" checked="checked" /></td><td style="text-align:left;padding-left:15px">' . $statement . '</td></tr>';
                 } elseif ($type === 'change') {
                     $statusMessage .= '<tr><td><input type="checkbox" name="dbUpdateStatements[]" value="' . $key . '" checked="checked" /></td><td style="text-align:left;padding-left:15px">' . $statement . '</td></tr>';
                     $statusMessage .= '<tr><td></td><td style="text-align:left;padding-left:15px">Current value: ' . $this->updateStatements['change_currentValue'][$key] . '</td></tr>';
                 } elseif ($type === 'create_table') {
                     $statusMessage .= '<tr><td><input type="checkbox" name="dbUpdateStatements[]" value="' . $key . '" checked="checked" /></td><td style="text-align:left;padding-left:15px;">' . nl2br($statement) . '</td></tr>';
                 }
             }
         }
         $statusMessage .= '</table></div>';
     }
     if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded($this->extension->getExtensionKey())) {
         $statusMessage .= '<p>Your Extension is not installed yet.</p>';
     }
     return $statusMessage;
 }
Esempio n. 3
0
 protected function removeInitialModelClassFile($modelName)
 {
     if (@file_exists($this->extension->getExtensionDir() . $this->modelClassDir . $modelName . '.php')) {
         unlink($this->extension->getExtensionDir() . $this->modelClassDir . $modelName . '.php');
     }
     $this->assertFalse(file_exists($this->extension->getExtensionDir() . $this->modelClassDir . $modelName . '.php'), 'Dummy files could not be removed:' . $this->extension->getExtensionDir() . $this->modelClassDir . $modelName . '.php');
 }
Esempio n. 4
0
 /**
  * The entry point to the class
  *
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  */
 public function build(\EBT\ExtensionBuilder\Domain\Model\Extension $extension)
 {
     $this->extension = $extension;
     if ($this->settings['extConf']['enableRoundtrip'] == 1) {
         $this->roundTripEnabled = true;
         $this->roundTripService->initialize($extension);
     }
     if (isset($this->settings['codeTemplateRootPath'])) {
         $this->codeTemplateRootPath = $this->settings['codeTemplateRootPath'];
     } else {
         throw new \Exception('No codeTemplateRootPath configured');
     }
     // Base directory already exists at this point
     $this->extensionDirectory = $this->extension->getExtensionDir();
     if (!is_dir($this->extensionDirectory)) {
         GeneralUtility::mkdir($this->extensionDirectory);
     }
     GeneralUtility::mkdir_deep($this->extensionDirectory, 'Configuration');
     $this->configurationDirectory = $this->extensionDirectory . 'Configuration/';
     GeneralUtility::mkdir_deep($this->extensionDirectory, 'Resources/Private');
     $this->privateResourcesDirectory = $this->extensionDirectory . 'Resources/Private/';
     $this->generateYamlSettingsFile();
     $this->generateExtensionFiles();
     $this->generatePluginFiles();
     $this->copyStaticFiles();
     $this->generateTCAFiles();
     $this->generateTyposcriptFiles();
     $this->generateHtaccessFile();
     $this->generateLocallangFiles();
     $this->generateDomainObjectRelatedFiles();
     if ($extension->getGenerateDocumentationTemplate()) {
         $this->generateDocumentationFiles();
     }
 }
Esempio n. 5
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\Domain\Model\Extension $extension
  */
 public function saveExtensionConfiguration(\EBT\ExtensionBuilder\Domain\Model\Extension $extension)
 {
     $extensionBuildConfiguration = $this->configurationManager->getConfigurationFromModeler();
     $extensionBuildConfiguration['log'] = array('last_modified' => date('Y-m-d h:i'), 'extension_builder_version' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getExtensionVersion('extension_builder'), 'be_user' => $GLOBALS['BE_USER']->user['realName'] . ' (' . $GLOBALS['BE_USER']->user['uid'] . ')');
     $encodeOptions = 0;
     // option JSON_PRETTY_PRINT is available since PHP 5.4.0
     if (defined('JSON_PRETTY_PRINT')) {
         $encodeOptions |= JSON_PRETTY_PRINT;
     }
     \TYPO3\CMS\Core\Utility\GeneralUtility::writeFile($extension->getExtensionDir() . \EBT\ExtensionBuilder\Configuration\ConfigurationManager::EXTENSION_BUILDER_SETTINGS_FILE, json_encode($extensionBuildConfiguration, $encodeOptions));
 }
Esempio n. 7
0
 /**
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @param string $codeTemplateRootPath
  * @return void
  */
 public function createInitialSettingsFile($extension, $codeTemplateRootPath)
 {
     GeneralUtility::mkdir_deep($extension->getExtensionDir(), self::SETTINGS_DIR);
     $settings = file_get_contents($codeTemplateRootPath . 'Configuration/ExtensionBuilder/settings.yamlt');
     $settings = str_replace('{extension.extensionKey}', $extension->getExtensionKey(), $settings);
     $settings = str_replace('{f:format.date(format:\'Y-m-d\\TH:i:s\\Z\',date:\'now\')}', date('Y-m-d\\TH:i:s\\Z'), $settings);
     GeneralUtility::writeFile($extension->getExtensionDir() . self::SETTINGS_DIR . 'settings.yaml', $settings);
 }
 public function tearDown()
 {
     if (!empty($this->extension) && $this->extension->getExtensionKey() != NULL) {
         GeneralUtility::rmdir($this->extension->getExtensionDir(), TRUE);
     }
 }
 /**
  *
  * @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();
 }
Esempio n. 10
0
 /**
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @return void
  */
 protected function checkExistingExtensions($extension)
 {
     if (is_dir($extension->getExtensionDir())) {
         $settingsFile = $extension->getExtensionDir() . \EBT\ExtensionBuilder\Configuration\ConfigurationManager::EXTENSION_BUILDER_SETTINGS_FILE;
         if (!file_exists($settingsFile) || $extension->isRenamed()) {
             $this->validationResult['warnings'][] = new ExtensionException('Extension directory exists', self::EXTENSION_DIR_EXISTS);
         }
     }
 }
Esempio n. 11
0
 /**
  *
  * @param \EBT\ExtensionBuilder\Domain\Model\Extension $extension
  * @param string $backupDir
  *
  * @return void
  */
 static function backupExtension(Model\Extension $extension, $backupDir)
 {
     if (empty($backupDir)) {
         throw new \Exception('Please define a backup directory in extension configuration!');
     } elseif (!GeneralUtility::validPathStr($backupDir)) {
         throw new \Exception('Backup directory is not a valid path: ' . $backupDir);
     } elseif (GeneralUtility::isAbsPath($backupDir)) {
         if (!GeneralUtility::isAllowedAbsPath($backupDir)) {
             throw new \Exception('Backup directory is not an allowed absolute path: ' . $backupDir);
         }
     } else {
         $backupDir = PATH_site . $backupDir;
     }
     if (strrpos($backupDir, '/') < strlen($backupDir) - 1) {
         $backupDir .= '/';
     }
     if (!is_dir($backupDir)) {
         throw new \Exception('Backup directory does not exist: ' . $backupDir);
     } elseif (!is_writable($backupDir)) {
         throw new \Exception('Backup directory is not writable: ' . $backupDir);
     }
     $backupDir .= $extension->getExtensionKey();
     // create a subdirectory for this extension
     if (!is_dir($backupDir)) {
         GeneralUtility::mkdir($backupDir);
     }
     if (strrpos($backupDir, '/') < strlen($backupDir) - 1) {
         $backupDir .= '/';
     }
     $backupDir .= date('Y-m-d-') . time();
     if (!is_dir($backupDir)) {
         GeneralUtility::mkdir($backupDir);
     }
     $extensionDir = substr($extension->getExtensionDir(), 0, strlen($extension->getExtensionDir()) - 1);
     try {
         self::recurse_copy($extensionDir, $backupDir);
     } catch (\Exception $e) {
         throw new \Exception('Code generation aborted:' . $e->getMessage());
     }
     self::log('Backup created in ' . $backupDir);
 }