/** * {@inheritdoc} * * @SuppressWarnings(PHPMD.LongVariable) */ public function handle(\Input $input) { if (\Database::getInstance()->tableExists('tl_repository_installs')) { $oldPackageCount = \Database::getInstance()->execute('SELECT COUNT(*) AS count FROM tl_repository_installs')->count; $commercialPackages = \Database::getInstance()->execute('SELECT * FROM tl_repository_installs WHERE lickey!=\'\'')->fetchEach('extension'); $commercialPackages = count($commercialPackages) ? implode(', ', $commercialPackages) : false; } else { $oldPackageCount = 0; $commercialPackages = ''; } $smhEnabled = Runtime::isSafeModeHackEnabled(); $allowUrlFopenEnabled = ini_get('allow_url_fopen'); $pharSupportEnabled = false; $apcOpcodeCacheEnabled = ini_get('apc.enabled') && ini_get('apc.cache_by_default'); try { if (class_exists('Phar', false)) { new \Phar(TL_ROOT . '/system/modules/!composer/config/test.phar'); $pharSupportEnabled = true; } } catch (\Exception $e) { } $composerSupported = !$smhEnabled && $allowUrlFopenEnabled && $pharSupportEnabled; $gitAvailable = Runtime::testProcess('git --version'); $hgAvailable = Runtime::testProcess('hg --version'); $svnAvailable = Runtime::testProcess('svn --version'); $mode = 'upgrade'; $setup = 'production'; if ($composerSupported && $input->post('FORM_SUBMIT') == 'tl_composer_migrate') { $target = 'contao/main.php?do=composer'; $mode = $input->post('mode'); $setup = $input->post('setup'); // load config $json = new JsonFile(TL_ROOT . '/' . $this->configPathname); $config = $json->read(); if ($input->post('skip')) { // mark migration skipped $config['extra']['contao']['migrated'] = 'skipped'; Messages::addConfirmation($GLOBALS['TL_LANG']['composer_client']['migrationSkipped']); } else { if (\Database::getInstance()->tableExists('tl_repository_installs')) { switch ($mode) { case 'upgrade': $this->removeER2Files(); $install = \Database::getInstance()->query('SELECT * FROM tl_repository_installs WHERE lickey=""'); while ($install->next()) { // skip the composer package if ($install->extension == 'composer') { continue; } $packageName = 'contao-legacy/' . $install->extension; /* $packageName = preg_replace( '{(?:([a-z])([A-Z])|([A-Z])([A-Z][a-z]))}', '\\1\\3-\\2\\4', $packageName ); */ $packageName = strtolower($packageName); $oldVersion = $install->version; $stability = $oldVersion % 10; $oldVersion = (int) ($oldVersion / 10); $oldVersion = (int) ($oldVersion / 1000); $minor = $oldVersion % 1000; $major = (int) ($oldVersion / 1000); $version = sprintf('~%d.%d%s', $major, $minor, static::$versionNames[$stability]); $config['require'][$packageName] = $version; } $target = 'contao/main.php?do=composer&update=packages'; break; case 'clean': $this->removeER2Files(); break; } } switch ($setup) { case 'production': $config['minimum-stability'] = 'dev'; $config['prefer-stable'] = true; $config['config']['preferred-install'] = 'dist'; break; case 'development': $config['minimum-stability'] = 'dev'; $config['prefer-stable'] = true; $config['config']['preferred-install'] = 'source'; break; } // mark migration done $config['extra']['contao']['migrated'] = 'done'; Messages::addConfirmation($GLOBALS['TL_LANG']['composer_client']['migrationDone']); } // write config $json->write($config); $this->redirect($target); } $template = new \BackendTemplate('be_composer_client_migrate'); $template->composer = $this->composer; $template->smhEnabled = $smhEnabled; $template->allowUrlFopenEnabled = $allowUrlFopenEnabled; $template->pharSupportEnabled = $pharSupportEnabled; $template->composerSupported = $composerSupported; $template->apcOpcodeCacheEnabled = $apcOpcodeCacheEnabled; $template->oldPackageCount = $oldPackageCount; $template->commercialPackages = $commercialPackages; $template->gitAvailable = $gitAvailable; $template->hgAvailable = $hgAvailable; $template->svnAvailable = $svnAvailable; $template->mode = $mode; $template->setup = $setup; return $template->parse(); }