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; }
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'); }
/** * 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(); } }
/** * * @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)); }
/** * @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(); }
/** * @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); } } }
/** * * @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); }