public function onPostInstallCommand(ScriptEvent $event) { $config = $event->getComposer()->getConfig(); $filesystem = new Filesystem(); $vendor_path = $filesystem->normalizePath(realpath($config->get('vendor-dir'))); $cake_dir = $filesystem->normalizePath($vendor_path . '/cakephp/cakephp'); $root_dir = $filesystem->normalizePath(realpath("")); $app_dir = $filesystem->normalizePath($root_dir . '/app'); if (!is_dir($app_dir)) { $this->copyRecursive($filesystem->normalizePath($cake_dir . '/app'), $app_dir); $index_path = $filesystem->normalizePath($app_dir . '/webroot/index.php'); $index = str_replace('define(\'CAKE_CORE_INCLUDE_PATH\', ROOT);', 'define(\'CAKE_CORE_INCLUDE_PATH\', ROOT . \'vendor\' . DS . \'cakephp\' . DS . \'cakephp\');', file_get_contents($index_path)); file_put_contents($index_path, $index); $loader_of_old_php_path = $filesystem->normalizePath($vendor_path . '/atomita/loader-of-less-than-php5.3-plugin'); if (file_exists($loader_of_old_php_path)) { $loader = <<<EOD // @generated by atomita/cakephp1-setup-plugin include(ROOT . DS . '{$config->get('vendor-dir')}' . DS . 'autoload.php'); // @end generated EOD; $config_path = $filesystem->normalizePath($app_dir . '/config/core.php'); $config = file_get_contents($config_path); if (false === strpos($config, $loader)) { file_put_contents($config_path, $config . PHP_EOL . PHP_EOL . $loader); } } } }
/** * @return int */ public function install() { $io = $this->event->getIO(); $composer = $this->event->getComposer(); $repository = new PhantomJSVersionRepository($io, $composer); $versions = $repository->getVersions(); if (!count($versions)) { $io->write('<error>Could not found any version.</error>'); return 1; } $binDir = $composer->getConfig()->get('bin-dir'); is_dir($binDir) ?: mkdir($binDir, 0755, true); $binDir = realpath($binDir); $vendorDir = $composer->getConfig()->get('vendor-dir') . '/sgc-fireball/phantomjs'; is_dir($vendorDir) ?: mkdir($vendorDir, 0755, true); $vendorDir = realpath($vendorDir); $downloader = new PhantomJSDownloader($io, $composer); foreach ($versions as $version) { try { $package = $downloader->createComposerPackage($version, $vendorDir); if ($downloader->download($package)) { copy($vendorDir . '/bin/phantomjs', $binDir . '/phantomjs'); chmod($binDir . '/phantomjs', 0755); return 0; } } catch (\Exception $e) { } } $io->write(sprintf('<error>Could not download %s.</error>', $package->getDistUrl())); return 2; }
public static function migrateSettingsFile(Event $event = null) { if ($event !== null) { $event->getIO()->write("Migrating old setting file..."); } if ($event) { $root_dir = realpath(''); } else { $root_dir = realpath('../../'); } if (file_exists($root_dir . '/app/config/parameters.yml')) { return false; } if (file_exists($root_dir . '/' . self::SETTINGS_FILE)) { $tmp_settings = file_get_contents($root_dir . '/' . self::SETTINGS_FILE); if (strpos($tmp_settings, '_DB_SERVER_') !== false) { $tmp_settings = preg_replace('/(\'|")\\_/', '$1_LEGACY_', $tmp_settings); file_put_contents($root_dir . '/' . self::SETTINGS_FILE, $tmp_settings); include $root_dir . '/' . self::SETTINGS_FILE; $factory = new RandomLib\Factory(); $generator = $factory->getLowStrengthGenerator(); $secret = $generator->generateString(56); $default_parameters = Yaml::parse($root_dir . '/app/config/parameters.yml.dist'); $parameters = array('parameters' => array('database_host' => _LEGACY_DB_SERVER_, 'database_port' => '~', 'database_user' => _LEGACY_DB_USER_, 'database_password' => _LEGACY_DB_PASSWD_, 'database_name' => _LEGACY_DB_NAME_, 'database_prefix' => _LEGACY_DB_PREFIX_, 'database_engine' => _LEGACY_MYSQL_ENGINE_, 'cookie_key' => _LEGACY_COOKIE_KEY_, 'cookie_iv' => _LEGACY_COOKIE_IV_, 'ps_caching' => _LEGACY_PS_CACHING_SYSTEM_, 'ps_cache_enable' => _LEGACY_PS_CACHE_ENABLED_, 'ps_creation_date' => _LEGACY_PS_CREATION_DATE_, 'secret' => $secret, 'mailer_transport' => 'smtp', 'mailer_host' => '127.0.0.1', 'mailer_user' => '~', 'mailer_password' => '~') + $default_parameters['parameters']); if (file_put_contents($root_dir . '/app/config/parameters.yml', Yaml::dump($parameters))) { $settings_content = "<?php\n"; $settings_content .= "//@deprecated 1.7"; file_put_contents($root_dir . '/' . self::SETTINGS_FILE, $settings_content); } } } if ($event !== null) { $event->getIO()->write("Finished..."); } }
/** * Update the stored database. * * @since 0.1.0 * * @param Event $event The event that has called the update method. */ public static function update(Event $event) { $dbFilename = PHPReleases::getLocation(); self::maybeCreateDBFolder(dirname($dbFilename)); $io = $event->getIO(); $io->write('Fetching change logs from official PHP website...', false); $io->write(' PHP5...', false); $php5 = self::downloadFile(self::PHP_5_RELEASES); $io->write(' PHP7...', false); $php7 = self::downloadFile(self::PHP_7_RELEASES); $io->write(' done!', true); $releases = array(); $io->write('Parsing change logs to extract versions...', false); $io->write(' PHP5...', false); $php5Releases = self::parseReleases($php5); $io->write('(' . count($php5Releases) . ' releases)', false); $releases = array_merge($releases, $php5Releases); $io->write(' PHP7...', false); $php7Releases = self::parseReleases($php7); $io->write('(' . count($php7Releases) . ' releases)', false); $releases = array_merge($releases, $php7Releases); $io->write(' done!', true); ksort($releases, SORT_NATURAL); self::generateConfig($releases, $dbFilename); $io->write('The PHP Releases database has been updated.', true); }
/** * @param Event $event */ public static function checkForSecurityIssues(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); $config = isset($extra['rolebi-dependencies-security-checker']) ? $extra['rolebi-dependencies-security-checker'] : array(); if (!is_array($config)) { throw new \InvalidArgumentException('The extra.rolebi-dependencies-security-checker setting must be an array.'); } $config = ConfigHandler::processConfig($config); $io = $event->getIO(); $io->write("\n" . '<info>Checking your dependencies for known vulnerabilities using your composer.lock</info>'); $io->write('<comment>This checker can only detect vulnerabilities that are referenced in the SensioLabs ' . 'security advisories database.</comment>' . "\n"); try { $vulnerabilities = static::getVulnerabilities(static::getComposerFile(), $config['ignored-packages']); } catch (ServiceUnavailableException $exception) { if ($config['error-on-service-unavailable']) { throw $exception; } else { $io->write("\n" . ' <error>' . $exception->getMessage() . '</error>'); return; } } $errorCount = count($vulnerabilities); if ($errorCount) { $io->write("\n" . ' <error>' . $errorCount . ' vulnerability(ies) found!</error>'); static::dumpVulnerabilities($io, $vulnerabilities); if ($config['error-on-vulnerabilities']) { $exception = new UnsafeDependenciesException('At least one of your dependencies contains known vulnerability(ies)'); throw $exception->setVulnerabilities($vulnerabilities); } } }
/** * @param Event $event * * @throws \InvalidArgumentException * @throws \RuntimeException * @throws \Symfony\Component\Filesystem\Exception\IOException * * @api * * @quality:method [C] */ public static function publish(Event $event) { $composer = $event->getComposer(); $extras = $composer->getPackage()->getExtra(); if (!isset($extras['admin-lte'])) { throw new \InvalidArgumentException('The AdminLTE installer needs to be configured through the extra.admin-lte setting.'); } $config = $extras['admin-lte']; if (!isset($config['target'])) { throw new \InvalidArgumentException('The extra.admin-lte must contains target path.'); } $package = $composer->getRepositoryManager()->getLocalRepository()->findPackage('almasaeed2010/adminlte', '~2.0'); if ($package === null) { throw new \RuntimeException('The AdminLTE package not found.'); } $forPublishing = ['dist' => 'adminlte']; if (!empty($config['bootstrap'])) { $forPublishing['bootstrap'] = 'adminlte-bootstrap'; } if (!empty($config['plugins'])) { $forPublishing['plugins'] = 'adminlte-plugins'; } if (!empty($config['demo'])) { $forPublishing[''] = 'adminlte-demo'; } (new Processor(new Filesystem(), $event->getIO()))->publish($config['target'], $composer->getInstallationManager()->getInstallPath($package), $forPublishing, !empty($config['symlink']), !empty($config['relative'])); }
/** * Ensures that .htaccess and web.config files are present in Composer root. * * @param \Composer\Script\Event $event */ public static function ensureHtaccess(Event $event) { // The current working directory for composer scripts is where you run // composer from. $vendor_dir = $event->getComposer()->getConfig()->get('vendor-dir'); // Prevent access to vendor directory on Apache servers. $htaccess_file = $vendor_dir . '/.htaccess'; if (!file_exists($htaccess_file)) { file_put_contents($htaccess_file, FileStorage::htaccessLines(TRUE) . "\n"); } // Prevent access to vendor directory on IIS servers. $webconfig_file = $vendor_dir . '/web.config'; if (!file_exists($webconfig_file)) { $lines = <<<EOT <configuration> <system.webServer> <authorization> <deny users="*"> </authorization> </system.webServer> </configuration> EOT; file_put_contents($webconfig_file, $lines . "\n"); } }
/** * Does some routine installation tasks so people don't have to. * * @param \Composer\Script\Event $event The composer event object. * @throws \Exception Exception raised by validator. * @return void */ public static function postInstall(Event $event) { $io = $event->getIO(); $rootDir = dirname(dirname(__DIR__)); static::createAppConfig($rootDir, $io); static::createEnvConfig($rootDir, $io); static::createWritableDirectories($rootDir, $io); // ask if the permissions should be changed if ($io->isInteractive()) { $validator = function ($arg) { if (in_array($arg, ['Y', 'y', 'N', 'n'])) { return $arg; } throw new Exception('This is not a valid answer. Please choose Y or n.'); }; $setFolderPermissions = $io->askAndValidate('<info>Set Folder Permissions ? (Default to Y)</info> [<comment>Y,n</comment>]? ', $validator, 10, 'Y'); if (in_array($setFolderPermissions, ['Y', 'y'])) { static::setFolderPermissions($rootDir, $io); } } else { static::setFolderPermissions($rootDir, $io); } static::setSecuritySalt($rootDir, $io); if (class_exists('\\Cake\\Codeception\\Console\\Installer')) { \Cake\Codeception\Console\Installer::customizeCodeceptionBinary($event); } }
public static function ask(Event $oEvent, $sQuestion, $sDefault = null, $bMandatory = false, $fValidatorCustom = null) { // Get validator if ($bMandatory) { $fValidator = function ($sValue) use($fValidatorCustom) { if ($sValue !== '' and !is_null($sValue)) { if (is_null($fValidatorCustom)) { return $sValue; } else { return call_user_func_array($fValidatorCustom, [$sValue]); } } else { throw new RuntimeException('Value can\'t be blank'); } }; } else { $fValidator = function ($sValue) use($fValidatorCustom) { $sValue = is_null($sValue) ? '' : $sValue; if (is_null($fValidatorCustom)) { return $sValue; } else { return call_user_func_array($fValidatorCustom, [$sValue]); } }; } // Return return $oEvent->getIO()->askAndValidate($sQuestion, $fValidator, null, $sDefault); }
public static function createRequiredFiles(Event $event) { $fs = new Filesystem(); $root = static::getDrupalRoot(getcwd()); $dirs = ['modules', 'profiles', 'themes']; // Required for unit testing foreach ($dirs as $dir) { if (!$fs->exists($root . '/' . $dir)) { $fs->mkdir($root . '/' . $dir); $fs->touch($root . '/' . $dir . '/.gitkeep'); } } // Prepare the settings file for installation if (!$fs->exists($root . '/sites/default/settings.php')) { $fs->copy($root . '/sites/default/default.settings.php', $root . '/sites/default/settings.php'); $fs->chmod($root . '/sites/default/settings.php', 0666); $event->getIO()->write("Create a sites/default/settings.php file with chmod 0666"); } // Prepare the services file for installation if (!$fs->exists($root . '/sites/default/services.yml')) { $fs->copy($root . '/sites/default/default.services.yml', $root . '/sites/default/services.yml'); $fs->chmod($root . '/sites/default/services.yml', 0666); $event->getIO()->write("Create a sites/default/services.yml file with chmod 0666"); } // Create the files directory with chmod 0777 if (!$fs->exists($root . '/sites/default/files')) { $oldmask = umask(0); $fs->mkdir($root . '/sites/default/files', 0777); umask($oldmask); $event->getIO()->write("Create a sites/default/files directory with chmod 0777"); } }
public static function mkdirs(Event $event) { $extras = $event->getComposer()->getPackage()->getExtra(); if (!isset($extras['fbourigault-composer-mkdir'])) { $message = 'The mkdir handler needs to be configured through the extra.fbourigault-composer-mkdir setting.'; throw new InvalidArgumentException($message); } if (!is_array($extras['fbourigault-composer-mkdir'])) { $message = 'The extra.fbourigault-composer-mkdir setting must be an array.'; throw new InvalidArgumentException($message); } /* Since 2.0, mode is no longer supported */ $legacy = array_filter($extras['fbourigault-composer-mkdir'], function ($directory) { return !is_string($directory); }); if (!empty($legacy)) { $message = 'Since 2.0, mode is no longer supported. See UPGRADE-2.0.md for further details.'; throw new InvalidArgumentException($message); } /* Remove existing directories from creation list */ $directories = array_filter($extras['fbourigault-composer-mkdir'], function ($directory) { return !file_exists($directory); }); foreach ($directories as $directory) { mkdir($directory, 0777, true); } }
public static function manage(Event $event, $extras, $newCopy) { $ciAppDir = realpath($extras['ci-app-dir']) . DIRECTORY_SEPARATOR; $libBaseDir = $ciAppDir . "core" . DIRECTORY_SEPARATOR; if ($extras['localize-ready']) { self::install('Lang', $libBaseDir); self::install('Config', $libBaseDir); $routeSource = Manager::getResourcePath('routes.php.mu', '/config'); } else { self::remove('Config', $libBaseDir); self::remove('Lang', $libBaseDir); $routeSource = Manager::getResourcePath('routes.php', '/config'); } $routeDest = $ciAppDir . "config" . DIRECTORY_SEPARATOR . 'routes.php'; $writeRoute = TRUE; $io = $event->getIO(); if (!$newCopy) { $writeMode = "Updating"; if (file_exists($routeDest)) { $confirmMsg = Colors::confirm("Re-Write Route Configuration File(yes,no)?[no]") . " :"; $writeRoute = $io->askConfirmation($confirmMsg, FALSE); } } else { $writeMode = PHP_EOL . "Writing"; } if ($writeRoute) { $io->write(Colors::message(sprintf("%s Route Configuration File ", $writeMode)) . Colors::info('"config/routes.php"')); copy($routeSource, $routeDest); } }
/** * Run composer post-install script * * @param Event $event * @return void */ public static function postInstall(Event $event) { static::init(); $event->getIO()->write('<info>Writing resources.lock file</info>'); $installed = json_decode(file_get_contents(static::$vendorPath . '/composer/installed.json')); $data = []; $finder = (new Finder())->directories()->ignoreVCS(true)->in(static::$resourcesPath . '/packages'); foreach ($installed as $package) { if (!property_exists($package, 'extra')) { continue; } $extra = $package->extra; if (!property_exists($extra, 'resources')) { continue; } $resources = $extra->resources; foreach ($resources as $resource => $namespaces) { foreach ($namespaces as $namespace => $path) { $finder->exclude($namespace); $data[$resource][$namespace] = $path; } } } // We turn the iterator to an array to // prevent an exception when we delete the directorys foreach (iterator_to_array($finder) as $file) { \Filesystem::deleteDirectory($file->getPathname()); } file_put_contents(static::$resourcesPath . '/resources.lock', json_encode($data, JSON_PRETTY_PRINT)); }
/** * private constructor * @param Event $event */ private function __construct($event) { $this->io = $event->getIO(); $this->event = $event; $this->dir = realpath(__DIR__ . "/../../"); $this->dbDir = $this->dir . '/scripts/dbupdates'; }
/** * Does some routine installation tasks so people don't have to. * * @param \Composer\Script\Event $event The composer event object. * @throws \Exception Exception raised by validator. * @return void */ public static function postUpdate(Event $event) { $io = $event->getIO(); $rootDir = dirname(dirname(__DIR__)); $jqueryVendorDir = $rootDir . '/vendor/components/jquery'; $jqueryWebrootDir = $rootDir . '/webroot/js/vendor/jquery'; $foundationVendorDir = $rootDir . '/vendor/zurb/foundation/js/foundation'; $foundationWebrootDir = $rootDir . '/webroot/js/vendor/foundation'; $modernizrVendorDir = $rootDir . '/vendor/components/modernizr'; $modernizrWebrootDir = $rootDir . '/webroot/js/vendor/modernizr'; if (is_dir($jqueryVendorDir)) { $jqueryFolder = new Folder($jqueryVendorDir); $jqueryFolder->copy($jqueryWebrootDir); $io->write('Copied `Jquery` files'); } if (is_dir($foundationVendorDir)) { $foundationFolder = new Folder($foundationVendorDir); $foundationFolder->copy($foundationWebrootDir); $io->write('Copied `Zurb Foundation JS` files'); } if (is_dir($modernizrVendorDir)) { $modernizrFolder = new Folder($modernizrVendorDir); $modernizrFolder->copy($modernizrWebrootDir); $io->write('Copied `Modernizr` files'); } }
public static function postInstall(Event $event) { // provides access to the current Composer instance $composer = $event->getComposer(); // run any post install tasks here copy('vendor/xqus/octoguard/gpg-mailgate.php', 'gpg-mailgate.php'); }
/** * Merge repositories and requirements from a separate composer-local.json. * * This allows static development dependencies to be shipped with Vanilla, but can be customized with a * composer-local.json file that specifies additional dependencies such as plugins or compatibility libraries. * * @param Event $event The event being fired. */ public static function preUpdate(Event $event) { self::clearAddonManagerCache(); // Check for a composer-local.json. $composerLocalPath = './composer-local.json'; if (!file_exists($composerLocalPath)) { return; } $composer = $event->getComposer(); $factory = new Factory(); $localComposer = $factory->createComposer($event->getIO(), $composerLocalPath, true, null, false); // Merge repositories. $localRepositories = $localComposer->getRepositoryManager()->getRepositories(); foreach ($localRepositories as $repository) { /* @var \Composer\Repository\RepositoryInterface $repository */ if (method_exists($repository, 'getRepoConfig')) { $config = $repository->getRepoConfig(); } else { $config = ['url' => '']; } // Skip the packagist repo. if (strpos($config['url'], 'packagist.org') !== false) { continue; } $composer->getRepositoryManager()->addRepository($repository); } // Merge requirements. $requires = array_merge($composer->getPackage()->getRequires(), $localComposer->getPackage()->getRequires()); $composer->getPackage()->setRequires($requires); $devRequires = array_merge($composer->getPackage()->getDevRequires(), $localComposer->getPackage()->getDevRequires()); $composer->getPackage()->setDevRequires($devRequires); }
/** * Installs index.php and themes. * * @param Event $event * @return bool */ public static function postPackageInstall(Event $event) { $installedPackage = $event->getOperation()->getPackage(); // do stuff // var_dump($event); return true; }
/** * {@inheritdoc} */ public function onInstallUpdateOrDump(Event $event) { // Wikimedia is also registered as a plugin, so it will have a chance to // merge it's dependencies. Here we override and add our module // dependencies. $this->mergeForDrupalRootPackage($event->getComposer()); }
public static function addPhpCsToPreCommitHook(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); $dependencyToResolve = self::arrayResolvePath("codesniffer:standard:dependency", $extra); if (is_null($dependencyToResolve)) { $event->getIO()->writeError("Cannot install pre-commit hooks. No CodeSniffer standard configured at extra->codesniffer->standard."); return; } if (is_array($dependencyToResolve)) { $event->getIO()->writeError("Cannot install pre-commit hooks. Configuration of extra->codesniffer->standard->dependency is invalid."); return; } $originFile = getcwd() . '/.git/hooks/pre-commit'; if (!is_dir(dirname($originFile))) { mkdir(dirname($originFile), 0777, true); } $templateContent = file_get_contents(__DIR__ . '/templates/git/hooks/pre-commit-phpcs'); $originContent = ''; if (file_exists($originFile)) { $originContent = file_get_contents($originFile); } if (strpos($originContent, '# BEGIN:metasyntactical/composer-codesniffer-hooks') !== false) { return; } $newContent = $originContent; if (mb_strlen($originContent)) { $newContent .= "\n"; } $newContent .= str_replace(array("{STANDARDPATH}"), array($event->getComposer()->getConfig()->get("vendor-dir", Config::RELATIVE_PATHS) . "/{$dependencyToResolve}/ruleset.xml"), $templateContent); file_put_contents($originFile, $newContent); $perms = fileperms($originFile); chmod($originFile, $perms | 0x40 | 0x8 | 0x1); clearstatcache(null, $originFile); }
public static function setup(Event $event) { $composer = $event->getComposer(); $installer = new self($event->getIO(), $composer, 'tiki-theme'); $composer->getInstallationManager()->addInstaller($installer); $composer->getEventDispatcher()->addSubscriber($installer); }
/** * Composer post install script * * @param Event $event */ private static function showMessage(Event $event = null) { $io = $event->getIO(); $io->write('=================================================='); $io->write('Welcome to CodeIgniter Composer Project!'); $io->write('<info>Copy `application folder` of CodeIgniter to root.</info>'); $io->write('<info>Copy `index.php` of CodeIgniter to root.</info>'); $io->write('<info>Copy `.htaccess` of CodeIgniter to root.</info>'); $io->write('<info>Update `index.php` to Vendor - CodeIgniter System folder.</info>'); $io->write('<info>Update `index.php` to Application folder on root.</info>'); $io->write('<info>Update `config.php` to use a better base_url.</info>'); $io->write('<info>Update `config.php` to read Composer packages on Vendor Folder.</info>'); $io->write('<info>Update `config.php` to make index_page blank.</info>'); $io->write('<info>Installation complete! \\o/</info>'); $io->write('=================================================='); $io->write('**************************************************'); $io->write('=================================================='); $io->write('<info>`/.htaccess` was installed. If you don\'t need it, please remove it.</info>'); $io->write('<info>If you want to install translations for system messages:</info>'); $io->write('$ cd <project_folder>'); $io->write('$ php bin/install.php'); $io->write('<info>Above command will show help message.</info>'); $io->write('See <https://github.com/Eihror/codeigniter-project> for details'); $io->write('=================================================='); }
/** * Does some routine installation tasks so people don't have to. * * @param \Composer\Script\Event $event The composer event object. * @return void */ public static function postInstall(Event $event) { $io = $event->getIO(); $rootDir = dirname(dirname(dirname(dirname(dirname(__DIR__))))); $pluginDir = dirname(dirname(__DIR__)); static::createPluginConfig($rootDir, $pluginDir, $io); }
/** * @author Krzysztof Bednarczyk * @param Event $event */ public static function build(Event $event) { self::$composer = $event->getComposer(); self::$packagesList = self::$composer->getRepositoryManager()->getLocalRepository()->getPackages(); self::$installationManager = self::$composer->getInstallationManager(); $packages = []; $corePackage = null; /** * @var $package CompletePackage */ foreach (self::$packagesList as $package) { if ($item = self::generatePackageEntry($package)) { $packages[] = $item; } } if ($item = self::generatePackageEntry(self::$composer->getPackage(), true)) { $packages[] = $item; } $xvDir = realpath(self::$composer->getConfig()->get('archive-dir')) . DIRECTORY_SEPARATOR . '.xvEngine'; if (!file_exists($xvDir)) { mkdir($xvDir); } /** * Hide directory in windows */ if (strncasecmp(PHP_OS, 'WIN', 3) == 0) { exec('attrib +H ' . escapeshellarg($xvDir), $res); } $data = ["packages" => $packages]; file_put_contents($xvDir . DIRECTORY_SEPARATOR . "packages.json", json_encode($data, JSON_PRETTY_PRINT)); }
public function postAutoloadDump(Event $event) { // Plugin has been uninstalled if (!file_exists(__FILE__)) { return; } if (!$this->initialized) { $this->initialize($event->getComposer(), $event->getIO()); } // This method is called twice. Run it only once. if (!$this->runPostAutoloadDump) { return; } $this->runPostAutoloadDump = false; $io = $event->getIO(); $compConfig = $event->getComposer()->getConfig(); $vendorDir = $compConfig->get('vendor-dir'); // On TravisCI, $vendorDir is a relative path. Probably an old Composer // build or something. Usually, $vendorDir should be absolute already. $vendorDir = Path::makeAbsolute($vendorDir, $this->rootDir); $autoloadFile = $vendorDir . '/autoload.php'; $classMapFile = $vendorDir . '/composer/autoload_classmap.php'; try { $factoryClass = $this->getConfigKey('factory.in.class'); $factoryFile = $this->getConfigKey('factory.in.file'); } catch (PuliRunnerException $e) { $this->printWarning($io, 'Could not load Puli configuration', $e); return; } $factoryFile = Path::makeAbsolute($factoryFile, $this->rootDir); $this->insertFactoryClassConstant($io, $autoloadFile, $factoryClass); $this->insertFactoryClassMap($io, $classMapFile, $vendorDir, $factoryClass, $factoryFile); $this->setBootstrapFile($io, $autoloadFile); }
public static function postInstallCmd(Event $event) { $baseXmlnuke = realpath(dirname(__FILE__) . "/../../../.."); $baseProject = realpath(dirname($baseXmlnuke) . "/../.."); $extra = $event->getComposer()->getPackage()->getExtra(); if (isset($extra) && isset($extra['project-name'])) { $projectName = $extra['project-name']; } else { $projectName = basename($baseProject); } $output = $event->getIO(); $output->write('=== XMLNUKE ===', true); $output->write('Xmlnuke Dir: ' . $baseXmlnuke, true); $output->write('Project Dir: ' . $baseProject, true); if (!file_exists($baseProject . '/httpdocs')) { $output->write("Creating Project...", true); $result = call_user_func_array(array('\\Xmlnuke\\Util\\CreatePhp5Project', 'Run'), array($baseXmlnuke . '/Composer.php', $baseProject, preg_replace('/[^A-Za-z0-0]/', '', $projectName), "en-us")); } if (!file_exists($baseProject . '/httpdocs/config.inc.php')) { $output->write("Setting the project ...", true); $configInc = file_get_contents($baseProject . "/httpdocs/config.inc-dist.php"); $configInc = str_replace('#XMLNUKE#', $baseXmlnuke, str_replace('#PROJECT#', $baseProject, $configInc)); file_put_contents($baseProject . "/httpdocs/config.inc.php", $configInc); } if (!file_exists($baseProject . '/data/anydataset/_db.anydata.xml')) { $output->write("Setting the _db.anydata ...", true); $dbInc = file_get_contents($baseProject . "/data/anydataset/_db.anydata-dist.xml"); file_put_contents($baseProject . "/data/anydataset/_db.anydata.xml", $dbInc); } $output->write("Updating Project References...", true); CreatePhp5Project::Update($baseXmlnuke, $baseProject); }
/** * Private method that manages the options of commands. * * @param Event $event The command event * * @return array */ private static function getOptions(Event $event) { $extras = $event->getComposer()->getPackage()->getExtra(); $options = isset($extras['kreta-distribution']) ? $extras['kreta-distribution'] : []; $options = array_merge(['npm-bin-links' => true, 'process-timeout' => $event->getComposer()->getConfig()->get('process-timeout')], $options); return $options; }
public function onPostUpdate(Event $event) { $requires = []; $overrides = []; $resolutions = []; if ($event->isDevMode()) { $extra = $this->composer->getPackage()->getExtra(); $bower = isset($extra['bower']) ? $extra['bower'] : []; if (isset($bower['require-dev'])) { $requires = $this->_mergeDependencyVersions($requires, $bower['require-dev']); } } $packages = [$this->composer->getPackage()]; $packages = array_merge($packages, $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages()); foreach ($packages as $package) { if ($package instanceof CompletePackage) { $extra = $package->getExtra(); $bower = isset($extra['bower']) ? $extra['bower'] : []; if (isset($bower['require'])) { $requires = $this->_mergeDependencyVersions($requires, $bower['require']); } if (isset($bower['overrides'])) { $overrides = array_merge_recursive($overrides, $bower['overrides']); } if (isset($bower['resolutions'])) { $resolutions = $bower['resolutions']; } } } if (!$requires) { $this->info("No Bower packages are required by the application or by any installed Composer package"); } $dependencies = $this->_installBower($requires, $overrides, $resolutions); $this->info((count($dependencies) ?: "No") . " bower packages are installed"); }
public static function postInstall(Event $event) { $io = $event->getIO(); $rootDir = dirname(dirname(__DIR__)); static::createAppConfig($rootDir, $io); static::setFolderPermissions($rootDir, $io); }
public static function buildParameters(Event $event) { $extras = $event->getComposer()->getPackage()->getExtra(); if (empty($extras['wmc-app-loader']['file'])) { if (empty($extras['symfony-app-dir'])) { throw new \InvalidArgumentException('Either extra.symfony-app-dir or extra.wmc-app-loader.file setting are required to use this script handler.'); } $appDir = $extras['symfony-app-dir']; $appLoader = new AppLoader($appDir, null); $realFile = $appLoader->getDefaultOptionsFile(); } else { $realFile = $extras['wmc-app-loader']['file']; } if (empty($extras['wmc-app-loader']['dist-file'])) { $distFile = $realFile . '.dist'; if (!is_file($distFile)) { // using packaged dist file $distFile = PackageLocator::getPackagePath($event->getComposer(), 'wemakecustom/symfony-app-loader') . '/app/config/app_loader.ini.dist'; } } else { $distFile = $extras['wmc-app-loader']['dist-file']; } $keepOutdatedParams = false; if (isset($extras['wmc-app-loader']['keep-outdated'])) { $keepOutdatedParams = (bool) $extras['wmc-app-loader']['keep-outdated']; } $updater = Utils::createConfigFileUpdate($event->getIO()); $updater->getConfigMerger()->setKeepOutdatedParams($keepOutdatedParams); $updater->updateFile($realFile, $distFile); }