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