/** * The entry point to the class * * @param Tx_ExtensionBuilder_Domain_Model_Extension $extension */ public function build(Tx_ExtensionBuilder_Domain_Model_Extension $extension) { $this->extension = $extension; if ($this->settings['extConf']['enableRoundtrip'] == 1) { $this->roundTripEnabled = TRUE; t3lib_div::devLog('roundtrip enabled', 'extension_builder', 0, $this->settings); } else { t3lib_div::devLog('roundtrip disabled', 'extension_builder', 0, $this->settings); } if (isset($this->settings['codeTemplateRootPath'])) { $this->codeTemplateRootPath = $this->settings['codeTemplateRootPath']; } else { throw new Exception('No codeTemplateRootPath configured'); } if ($this->extension->getTargetVersion() == 4.5) { $this->locallangFileFormat = 'xml'; } // Base directory already exists at this point $this->extensionDirectory = $this->extension->getExtensionDir(); if (!is_dir($this->extensionDirectory)) { t3lib_div::mkdir($this->extensionDirectory); } t3lib_div::mkdir_deep($this->extensionDirectory, 'Configuration'); $this->configurationDirectory = $this->extensionDirectory . 'Configuration/'; t3lib_div::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 (floatval($this->extension->getTargetVersion()) > 4.6) { $this->generateDocumentationFiles(); } }
/** * * @param Tx_ExtensionBuilder_Domain_Model_Extension $extension * @param string $backupDir * * @return void */ static function backupExtension($extension, $backupDir) { if (empty($backupDir)) { throw new Exception('Please define a backup directory in extension configuration!'); } else { if (!t3lib_div::validPathStr($backupDir)) { throw new Exception('Backup directory is not a valid path: ' . $backupDir); } else { if (t3lib_div::isAbsPath($backupDir)) { if (!t3lib_div::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); } else { if (!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)) { t3lib_div::mkdir($backupDir); } if (strrpos($backupDir, '/') < strlen($backupDir) - 1) { $backupDir .= '/'; } $backupDir .= date('Y-m-d-') . time(); if (!is_dir($backupDir)) { t3lib_div::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()); } t3lib_div::devlog('Backup created in ' . $backupDir, 'extension_builder', 0); }
/** * @param Tx_ExtensionBuilder_Domain_Model_Extension $extension * @return void */ protected function checkExistingExtensions($extension) { if (is_dir($extension->getExtensionDir())) { $settingsFile = $extension->getExtensionDir() . Tx_ExtensionBuilder_Configuration_ConfigurationManager::EXTENSION_BUILDER_SETTINGS_FILE; if (!file_exists($settingsFile) || $extension->isRenamed()) { $this->validationResult['warnings'][] = new Tx_ExtensionBuilder_Domain_Exception_ExtensionException('Extension directory exists', self::EXTENSION_DIR_EXISTS); } } }
/** * @param Tx_ExtensionBuilder_Domain_Model_Extension $extension */ public function saveExtensionConfiguration(Tx_ExtensionBuilder_Domain_Model_Extension $extension) { $extensionBuildConfiguration = $this->configurationManager->getConfigurationFromModeler(); $extensionBuildConfiguration['log'] = array('last_modified' => date('Y-m-d h:i'), 'extension_builder_version' => t3lib_extMgm::getExtensionVersion('extension_builder'), 'be_user' => $GLOBALS['BE_USER']->user['realName'] . ' (' . $GLOBALS['BE_USER']->user['uid'] . ')'); t3lib_div::writeFile($extension->getExtensionDir() . Tx_ExtensionBuilder_Configuration_ConfigurationManager::EXTENSION_BUILDER_SETTINGS_FILE, json_encode($extensionBuildConfiguration)); }
/** * * @param Tx_ExtensionBuilder_Domain_Model_Extension $extension * @param string $codeTemplateRootPath */ public function createInitialSettingsFile($extension, $codeTemplateRootPath) { t3lib_div::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>now</f:format.date>', date('Y-m-d H:i'), $settings); t3lib_div::writeFile($extension->getExtensionDir() . self::SETTINGS_DIR . 'settings.yaml', $settings); }