/** * {@inheritdoc} */ public function handle(\Input $input) { $this->handleRunOnce(); // PATCH if ($input->post('FORM_SUBMIT') == 'database-update') { $count = 0; $sql = deserialize($input->post('sql')); if (is_array($sql)) { foreach ($sql as $key) { if (isset($_SESSION['sql_commands'][$key])) { $this->Database->query(str_replace('DEFAULT CHARSET=utf8;', 'DEFAULT CHARSET=utf8 COLLATE ' . $GLOBALS['TL_CONFIG']['dbCollation'] . ';', $_SESSION['sql_commands'][$key])); $count++; } } } $_SESSION['sql_commands'] = array(); Messages::addConfirmation(sprintf($GLOBALS['TL_LANG']['composer_client']['databaseUpdated'], $count)); $this->reload(); } /** @var \Contao\Database\Installer $installer */ $installer = \System::importStatic('Database\\Installer'); $form = $installer->generateSqlForm(); if (empty($form)) { Messages::addInfo($GLOBALS['TL_LANG']['composer_client']['databaseUptodate']); $this->redirect('contao/main.php?do=composer'); } $form = preg_replace('#(<label for="sql_\\d+")>(CREATE TABLE)#', '$1 class="create_table">$2', $form); $form = preg_replace('#(<label for="sql_\\d+")>(ALTER TABLE `[^`]+` ADD)#', '$1 class="alter_add">$2', $form); $form = preg_replace('#(<label for="sql_\\d+")>(ALTER TABLE `[^`]+` DROP)#', '$1 class="alter_drop">$2', $form); $form = preg_replace('#(<label for="sql_\\d+")>(DROP TABLE)#', '$1 class="drop_table">$2', $form); $template = new \BackendTemplate('be_composer_client_update'); $template->composer = $this->composer; $template->form = $form; return $template->parse(); }
/** * {@inheritdoc} * * @SuppressWarnings(PHPMD.LongVariable) */ public function handle(\Input $input) { $packageName = $input->get('install'); if ($packageName == 'contao/core') { $this->redirect('contao/main.php?do=composer'); } if ($input->post('version')) { $version = base64_decode(rawurldecode($input->post('version'))); // make a backup copy(TL_ROOT . '/' . $this->configPathname, TL_ROOT . '/' . $this->configPathname . '~'); // update requires $json = new JsonFile(TL_ROOT . '/' . $this->configPathname); $config = $json->read(); if (!array_key_exists('require', $config)) { $config['require'] = array(); } $config['require'][$packageName] = $version; ksort($config['require']); $json->write($config); Messages::addInfo(sprintf($GLOBALS['TL_LANG']['composer_client']['added_candidate'], $packageName, $version)); $_SESSION['COMPOSER_OUTPUT'] .= $this->io->getOutput(); $this->redirect('contao/main.php?do=composer'); } $installationCandidates = $this->searchPackage($packageName); if (empty($installationCandidates)) { Messages::addError(sprintf($GLOBALS['TL_LANG']['composer_client']['noInstallationCandidates'], $packageName)); $_SESSION['COMPOSER_OUTPUT'] .= $this->io->getOutput(); $this->redirect('contao/main.php?do=composer'); } $template = new \BackendTemplate('be_composer_client_install'); $template->composer = $this->composer; $template->packageName = $packageName; $template->candidates = $installationCandidates; return $template->parse(); }
/** * {@inheritdoc} */ public function handle(\Input $input) { $removeNames = $input->post('packages') ? explode(',', $input->post('packages')) : array($input->post('remove')); // filter undeletable packages $removeNames = array_filter($removeNames, function ($removeName) { return !in_array($removeName, InstalledController::$UNDELETABLE_PACKAGES); }); // skip empty if (empty($removeNames)) { $this->redirect('contao/main.php?do=composer'); } // make a backup copy(TL_ROOT . '/' . $this->configPathname, TL_ROOT . '/' . $this->configPathname . '~'); // update requires $json = new JsonFile(TL_ROOT . '/' . $this->configPathname); $config = $json->read(); if (!array_key_exists('require', $config)) { $config['require'] = array(); } foreach ($removeNames as $removeName) { unset($config['require'][$removeName]); } $json->write($config); Messages::addInfo(sprintf($GLOBALS['TL_LANG']['composer_client']['removeCandidate'], implode(', ', $removeNames))); $_SESSION['COMPOSER_OUTPUT'] .= $this->io->getOutput(); $this->redirect('contao/main.php?do=composer'); }
/** * {@inheritdoc} */ public function handle(\Input $input) { // get installed packages $localRepository = $this->composer->getRepositoryManager()->getLocalRepository(); $packages = $localRepository->getPackages(); // find contao composer plugin $plugins = $this->composer->getPluginManager()->getPlugins(); $plugin = null; foreach ($plugins as $temp) { if ($temp instanceof Plugin) { $plugin = $temp; } } // plugin not found -> abort if (!$plugin) { Messages::addError($GLOBALS['TL_LANG']['composer_client']['pluginNotFound']); $this->redirect('contao/main.php?do=composer&tools=dialog'); } // create installer $config = $this->composer->getConfig(); if ($config->get('preferred-install') == 'dist') { $installer = new CopyInstaller($this->io, $this->composer, $plugin); } else { $installer = new SymlinkInstaller($this->io, $this->composer, $plugin); } /** @var PackageInterface[] $packages */ /** @var Plugin $plugin */ foreach ($packages as $package) { if ($package instanceof AliasPackage) { continue; } try { $this->io->write(sprintf($GLOBALS['TL_LANG']['composer_client']['resyncPackage'], $package->getName())); $installer->updateContaoFiles($package); Messages::addInfo(sprintf($GLOBALS['TL_LANG']['composer_client']['resyncedPackage'], $package->getName())); } catch (\RuntimeException $e) { Messages::addError(sprintf($GLOBALS['TL_LANG']['composer_client']['resyncFailed'], $package->getName(), $e->getMessage())); } } $_SESSION['COMPOSER_OUTPUT'] .= $this->io->getOutput(); $this->redirect('contao/main.php?do=composer&update=database'); }
/** * {@inheritdoc} * * @SuppressWarnings(PHPMD.LongVariable) */ public function handle(\Input $input) { $packageName = $input->get('solve'); $version = base64_decode(rawurldecode($input->get('version'))); if ($input->post('mark') || $input->post('install')) { // make a backup copy(TL_ROOT . '/' . $this->configPathname, TL_ROOT . '/' . $this->configPathname . '~'); // update requires $json = new JsonFile(TL_ROOT . '/' . $this->configPathname); $config = $json->read(); if (!array_key_exists('require', $config)) { $config['require'] = array(); } $config['require'][$packageName] = $version; $json->write($config); Messages::addInfo(sprintf($GLOBALS['TL_LANG']['composer_client']['added_candidate'], $packageName, $version)); $_SESSION['COMPOSER_OUTPUT'] .= $this->io->getOutput(); if ($input->post('install')) { $this->redirect('contao/main.php?do=composer&update=packages'); } $this->redirect('contao/main.php?do=composer'); } /** @var RootPackage $rootPackage */ $rootPackage = $this->composer->getPackage(); $installedRootPackage = clone $rootPackage; $installedRootPackage->setRequires(array()); $installedRootPackage->setDevRequires(array()); $repositoryManager = $this->getRepositoryManager(); $localRepository = $repositoryManager->getLocalRepository(); $platformRepo = new PlatformRepository(); $installedRepository = new CompositeRepository(array($localRepository, new InstalledArrayRepository(array($installedRootPackage)), $platformRepo)); $versionParser = new VersionParser(); $constraint = $versionParser->parseConstraints($version); $stability = $versionParser->parseStability($version); $aliases = $this->getRootAliases($rootPackage); $this->aliasPlatformPackages($platformRepo, $aliases); $stabilityFlags = $rootPackage->getStabilityFlags(); $stabilityFlags[$packageName] = BasePackage::$stabilities[$stability]; $pool = $this->getPool($rootPackage->getMinimumStability(), $stabilityFlags); $pool->addRepository($installedRepository, $aliases); $policy = new DefaultPolicy($rootPackage->getPreferStable()); $request = new Request($pool); // add root package $rootPackageConstraint = $this->createConstraint('=', $rootPackage->getVersion()); $rootPackageConstraint->setPrettyString($rootPackage->getPrettyVersion()); $request->install($rootPackage->getName(), $rootPackageConstraint); // add requirements $links = $rootPackage->getRequires(); /** @var Link $link */ foreach ($links as $link) { if ($link->getTarget() != $packageName) { $request->install($link->getTarget(), $link->getConstraint()); } } /** @var PackageInterface $package */ foreach ($installedRepository->getPackages() as $package) { $request->install($package->getName(), $this->createConstraint('=', $package->getVersion())); } $operations = array(); try { $solver = new Solver($policy, $pool, $installedRepository); $beforeOperations = $solver->solve($request); $request->install($packageName, $constraint); $operations = $solver->solve($request); /** @var \Composer\DependencyResolver\Operation\SolverOperation $beforeOperation */ foreach ($beforeOperations as $beforeOperation) { /** @var \Composer\DependencyResolver\Operation\InstallOperation $operation */ foreach ($operations as $index => $operation) { if ($operation->getPackage()->getName() != $packageName && $beforeOperation->__toString() == $operation->__toString()) { unset($operations[$index]); } } } } catch (SolverProblemsException $e) { Messages::addError(sprintf('<span style="white-space: pre-line">%s</span>', trim($e->getMessage()))); } $template = new \BackendTemplate('be_composer_client_solve'); $template->composer = $this->composer; $template->packageName = $packageName; $template->packageVersion = $version; $template->operations = $operations; return $template->parse(); }