public static function generate(Event $event) { $io = $event->getIO(); $packages = $event->getComposer()->getRepositoryManager()->getLocalRepository()->getPackages(); $requires = $event->getComposer()->getPackage()->getRequires(); // the packages and the required dependencies does not have all information // so we have to use both arrays to extract needed details foreach ($requires as $i => $require) { /** @var $require \Composer\Package\Link **/ $search = array_filter($packages, function ($e) use($require) { return $e->getName() == $require->getTarget(); }); if (!empty($search)) { $package = current($search); /** @var $package \Composer\Package\Package **/ $io->write('<info>name</info> : ' . '<comment>' . $package->getPrettyName() . '</comment>', true); $io->write('<info>descrip.</info> : ' . $package->getDescription(), true); $io->write('<info>license</info> : ' . implode(', ', $package->getLicense()), true); $io->write('<info>version</info> : ' . $package->getPrettyVersion(), true); $io->write('<info>constraint</info> : ' . $require->getPrettyConstraint(), true); $io->write('<info>source</info> : ' . $package->getSourceUrl(), true); $io->write('<info>homepage</info> : ' . ($package->getHomepage() ? $package->getHomepage() : str_replace(".git", "", $package->getSourceUrl())), true); $subRequires = implode(', ', array_map(function ($package) { return $package->getTarget(); }, $package->getRequires())); $io->write('<info>requires</info> : ' . ($subRequires ? $subRequires : 'none'), true); $io->write('', true); } } }
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); }
/** * 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; }
/** * @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; }
/** * Installs the shop files. * * @param \Composer\Script\Event $event Event instance * @throws \RuntimeException If an error occured */ public static function install(\Composer\Script\Event $event) { $repository = $event->getComposer()->getRepositoryManager(); $t3package = $repository->findPackage('aimeos/aimeos-typo3', '*'); if ($t3package !== null) { $installer = $event->getComposer()->getInstallationManager(); $t3path = $installer->getInstallPath($t3package); if (($package = $repository->findPackage('aimeos/ai-client-html', '*')) !== null) { $event->getIO()->write('Installing Aimeos public files from HTML client'); $path = $installer->getInstallPath($package); self::copyRecursive($path . '/client/html/themes', $t3path . '/Resources/Public/Themes'); } if (($package = $repository->findPackage('aimeos/ai-admin-extadm', '*')) !== null) { $event->getIO()->write('Installing Aimeos public files from ExtJS admin'); $path = $installer->getInstallPath($package); self::copyRecursive($path . '/admin/extjs/resources', $t3path . '/Resources/Public/Admin/extjs/resources'); self::copyRecursive($path . '/admin/extjs/lib/ext.ux/Portal/resources', $t3path . '/Resources/Public/Admin/extjs/lib/ext.ux/Portal'); self::copyRecursive($path . '/admin/extjs/lib/ext.ux/AdvancedSearch/resources', $t3path . '/Resources/Public/Admin/extjs/lib/ext.ux/AdvancedSearch'); } if (file_exists($t3path . '/Resources/Private/Extensions') === false && ($package = $repository->findPackage('aimeos/ai-typo3', '*')) !== null) { $event->getIO()->write('Creating symlink to Aimeos extension directory'); $path = dirname($installer->getInstallPath($package)); symlink(getcwd() . '/' . $path, $t3path . '/Resources/Private/Extensions'); } } }
public function preAutoloadDumpEvent(Script\Event $event) { if ($event->isPropagationStopped()) { return; } $references = array(); // find current package reference $localPackageReference = $this->determineLocalPackageReference(); if ($localPackageReference !== null) { $references[$event->getComposer()->getPackage()->getName()] = $localPackageReference; } // enumerate local repository packages foreach ($event->getComposer()->getRepositoryManager()->getLocalRepository()->getCanonicalPackages() as $package) { if ($package->getSourceReference() !== null) { $references[$package->getName()] = $package->getSourceReference(); } else { if ($package->getDistReference() !== null) { $references[$package->getName()] = $package->getDistReference(); } } } $destination = $event->getComposer()->getConfig()->get('vendor-dir') . DIRECTORY_SEPARATOR . 'mcuelenaere' . DIRECTORY_SEPARATOR . 'composer-revision-plugin' . DIRECTORY_SEPARATOR . 'gen' . DIRECTORY_SEPARATOR . 'revisions.php'; $classGenerator = new ReferenceClassGenerator($event->getComposer()->getConfig()); $classGenerator->generate($destination, $references); }
/** * @param Event $event * * @throws \InvalidArgumentException when extra configuration is not defined properly */ public static function build(Event $event) { $io = $event->getIO(); // everything needed for this installer // is stored in the "extra" config section $extra = $event->getComposer()->getPackage()->getExtra(); if (!array_key_exists(self::PROPERTY_PUPPET_MODULES_DIR, $extra) || !array_key_exists(self::PROPERTY_PUPPET_MODULES, $extra)) { throw new \InvalidArgumentException('"extra" configuration needs properties "modules-dir" and "modules"'); } // find out where we are and where we should install the puppet modules $modulesDir = $extra[self::PROPERTY_PUPPET_MODULES_DIR]; $vendorDir = realpath($event->getComposer()->getConfig()->get('vendor-dir')); $projectDir = realpath($vendorDir . '/..'); // copy original puppet module dir from vendors to the puppet modules dir foreach ($extra[self::PROPERTY_PUPPET_MODULES] as $name => $target) { if (empty($name) || empty($target)) { $io->write(sprintf('Skip Puppet module installation from "%s" to "%s"', $name, $target)); continue; } $modulePath = $modulesDir . '/' . $target; $io->write(sprintf('Installing Puppet module "%s" to "%s"', $name, $modulePath)); $from = $vendorDir . '/' . $name; $to = $projectDir . '/' . $modulePath; // @TODO is there a better way without installing any other vendor lib? shell_exec("rsync -rv --delete {$from}/ {$to}/"); } }
/** * @param Event $event */ public static function overload(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); if ($event->isDevMode()) { $envs = [static::EXTRA_OVERLOAD_CLASS, static::EXTRA_OVERLOAD_CLASS_DEV]; $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR_DEV; if (array_key_exists($cacheDir, $extra) === false) { $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR; } } else { $envs = [static::EXTRA_OVERLOAD_CLASS]; $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR; } foreach ($envs as $extraKey) { if (array_key_exists($extraKey, $extra)) { $autoload = $event->getComposer()->getPackage()->getAutoload(); if (array_key_exists('classmap', $autoload) === false) { $autoload['classmap'] = array(); } foreach ($extra[$extraKey] as $className => $infos) { static::generateProxy($extra[$cacheDir], $className, $infos['original-file']); $autoload['classmap'][$className] = $infos['overload-file']; } $event->getComposer()->getPackage()->setAutoload($autoload); } } }
/** * Plugin callback for this script event, which calls the previously implemented static method * * @param \Composer\Script\Event $event * @return bool */ public function onPostAutoloadDump(\Composer\Script\Event $event) { $flags = $event->getFlags(); $config = $event->getComposer()->getConfig(); $optimizeAutoloadFiles = !empty($flags['optimize']) || $config->get('optimize-autoloader') || $config->get('classmap-authoritative'); $aliasMapGenerator = new ClassAliasMapGenerator($event->getComposer(), $event->getIO(), $optimizeAutoloadFiles); return $aliasMapGenerator->generateAliasMap(); }
/** * @param Event $event */ public static function checker(Event $event) { $extras = $event->getComposer()->getConfig()->getExtra(); var_dump($event->getComposer()->getPackage()->getRepositories()); die('d'); $event->getIO()->write("<info>[CheckerPlugin]</info> plugin activate"); var_dump($extras); }
/** * Copy assets into you assets directory * * @param Event $event */ public static function copyAssets(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); if (!isset($extra[self::EXTRA_ASSET_DIR])) { return; } $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir'); $fs = new Filesystem(); $fs->mirror($vendorDir . '/itkg/profiler/src/Itkg/Profiler/Resources/public', $extra[self::EXTRA_ASSET_DIR] . '/vendor/itkg/profiler/assets'); }
/** * Copy assets into you assets directory * * @param Event $event */ public static function copyAssets(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); if (!isset($extra[self::EXTRA_ASSET_DIR])) { return; } $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir'); $fs = new Filesystem(); $fs->mirror($vendorDir . '/maximebf/debugbar/src/DebugBar/Resources', $extra[self::EXTRA_ASSET_DIR] . '/vendor/maximebf/debugbar/src/DebugBar/Resources'); }
/** * @param Event $event */ public static function postInstall(Event $event) { static::$installationManager = $event->getComposer()->getInstallationManager(); static::$localRepository = $event->getComposer()->getRepositoryManager()->getLocalRepository(); $rootDirectory = __DIR__ . '/../../../../'; static::copyFile('twbs/bootstrap', 'dist/css/bootstrap.min.css', $rootDirectory . 'public/css/bootstrap.min.css'); static::mirrorDirectory('twbs/bootstrap', 'dist/fonts', $rootDirectory . 'public/fonts'); if (!file_exists($rootDirectory . 'app/settings.yml')) { static::getFileSystem()->copy($rootDirectory . 'app/settings.example.yml', $rootDirectory . 'app/settings.yml', true); } }
/** * @param Event $event * * @return Recorder */ private static function getRecorder(Event $event) { if (!isset(static::$recorder)) { $vendorDir = realpath(rtrim($event->getComposer()->getConfig()->get('vendor-dir'), '/')); $configDir = realpath($vendorDir . '/../app/config'); $logger = new ConsoleIoLogger($event->getIO()); $manager = $event->getComposer()->getRepositoryManager(); $rootPackage = $event->getComposer()->getPackage(); static::$recorder = new Recorder($manager->getLocalRepository(), new Detector($vendorDir), new BundleHandler($configDir, $logger), $rootPackage->getAliases(), $vendorDir); } return static::$recorder; }
/** * On post install cmd. * * @param Event $e * @return void */ public static function postInstallCmd(Event $e) { $vendorDir = $e->getComposer()->getConfig()->get('vendor-dir'); foreach ($e->getComposer()->getPackage()->getExtra() as $pattern => $folder) { foreach (glob($vendorDir . DIRECTORY_SEPARATOR . $pattern) as $file) { if (file_exists($folder) === false) { mkdir($folder); } copy($file, $folder . DIRECTORY_SEPARATOR . basename($file)); } } }
/** * Script callback; Acted on after install or update. */ public function onPostUpdateInstall(Event $event) { $settings = array('targetDir' => 'vendor/nodejs/nodejs', 'forceLocal' => false, 'includeBinInPath' => false); $extra = $event->getComposer()->getPackage()->getExtra(); if (isset($extra['mouf']['nodejs'])) { $rootSettings = $extra['mouf']['nodejs']; $settings = array_merge($settings, $rootSettings); $settings['targetDir'] = trim($settings['targetDir'], '/\\'); } $binDir = $event->getComposer()->getConfig()->get('bin-dir'); if (!class_exists(__NAMESPACE__ . '\\NodeJsVersionMatcher')) { //The package is being uninstalled $this->onUninstall($binDir, $settings['targetDir']); return; } $nodeJsVersionMatcher = new NodeJsVersionMatcher(); $versionConstraint = $this->getMergedVersionConstraint(); $this->verboseLog("<info>NodeJS installer:</info>"); $this->verboseLog(" - Requested version: " . $versionConstraint); $nodeJsInstaller = new NodeJsInstaller($this->io); $isLocal = false; if ($settings['forceLocal']) { $this->verboseLog(" - Forcing local NodeJS install."); $this->installLocalVersion($nodeJsInstaller, $versionConstraint, $settings['targetDir']); $isLocal = true; } else { $globalVersion = $nodeJsInstaller->getNodeJsGlobalInstallVersion(); if ($globalVersion !== null) { $this->verboseLog(" - Global NodeJS install found: v" . $globalVersion); $npmPath = $nodeJsInstaller->getGlobalInstallPath('npm'); if (!$npmPath) { $this->verboseLog(" - No NPM install found"); $this->installLocalVersion($nodeJsInstaller, $versionConstraint, $settings['targetDir']); $isLocal = true; } elseif (!$nodeJsVersionMatcher->isVersionMatching($globalVersion, $versionConstraint)) { $this->installLocalVersion($nodeJsInstaller, $versionConstraint, $settings['targetDir']); $isLocal = true; } else { $this->verboseLog(" - Global NodeJS install matches constraint " . $versionConstraint); } } else { $this->verboseLog(" - No global NodeJS install found"); $this->installLocalVersion($nodeJsInstaller, $versionConstraint, $settings['targetDir']); $isLocal = true; } } // Now, let's create the bin scripts that start node and NPM $nodeJsInstaller->createBinScripts($binDir, $settings['targetDir'], $isLocal); // Finally, let's register vendor/bin in the PATH. if ($settings['includeBinInPath']) { $nodeJsInstaller->registerPath($binDir); } }
private static function updateRequiresLibraries(Event $event) { $package = $event->getComposer()->getPackage(); $requiresList = $package->getRequires(); $extras = $event->getComposer()->getPackage()->getExtra(); foreach (self::$requires as $require => $label) { $statusKeyName = self::getStatusKeyName($require); if ($statusKeyName && !$extras[$statusKeyName]) { unset($requiresList[$require]); } } $package->setRequires($requiresList); }
public function registerStudioPackages(Event $event) { $this->targetDir = realpath($event->getComposer()->getPackage()->getTargetDir()); $studioFile = "{$this->targetDir}/studio.json"; $config = $this->getConfig($studioFile); if ($config->hasPackages()) { $io = $event->getIO(); $repoManager = $event->getComposer()->getRepositoryManager(); $composerConfig = $event->getComposer()->getConfig(); foreach ($config->getPackages() as $package => $path) { $io->writeError("[Studio] Registering package {$package} with {$path}"); $repoManager->addRepository(new PathRepository(['url' => $path], $io, $composerConfig)); } } }
public static function postAutoloadDump(Event $event) { $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir'); $extra = $event->getComposer()->getPackage()->getExtra(); $localPsr4Config = array_key_exists('local-psr-4', $extra) ? $extra['local-psr-4'] : null; $localExtensions = array_key_exists('local-yii2-extensions', $extra) ? $extra['local-yii2-extensions'] : null; if ($localExtensions) { $extensions = self::loadExtensions($vendorDir); $extensions = array_merge($extensions, $localExtensions); self::saveExtensions($vendorDir, $extensions); } if ($localPsr4Config) { self::savePsr4s($vendorDir, $localPsr4Config, $event->getIO()); } }
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 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 setup(Event $event) { $composer = $event->getComposer(); $installer = new self($event->getIO(), $composer, 'tiki-theme'); $composer->getInstallationManager()->addInstaller($installer); $composer->getEventDispatcher()->addSubscriber($installer); }
/** * {@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()); }
/** * 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"); } }
/** * @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'])); }
/** * @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); } } }
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); }
/** * @return string */ protected static function getCoreHooksPath() { foreach (static::$event->getArguments() as $arg) { if (strpos($arg, '--') !== 0) { return $arg; } } /** @var \Composer\Package\Package $root_package */ $root_package = static::$event->getComposer()->getPackage(); $extra = $root_package->getExtra(); if (!empty($extra[static::$selfPackage['name']]['core.hooksPath'])) { return $extra[static::$selfPackage['name']]['core.hooksPath']; } if (is_dir(static::$defaultCoreHooksPath)) { return static::$defaultCoreHooksPath; } /** @var \Composer\Config $config */ $config = static::$event->getComposer()->getConfig(); $chg_path_abs = $config->get('vendor-dir') . '/' . static::$selfPackage['name']; $cwd = getcwd(); $cgh_path_rel = preg_replace('@^' . preg_quote("{$cwd}/", '@') . '@', '', "{$chg_path_abs}/"); $cgh_path_rel = rtrim($cgh_path_rel, '/'); if (!$cgh_path_rel) { $cgh_path_rel = '.'; } if (is_dir("{$cgh_path_rel}/" . static::$defaultCoreHooksPath)) { return "{$cgh_path_rel}/" . static::$defaultCoreHooksPath; } if ($root_package->getName() === static::$selfPackage['name']) { return static::$defaultCoreHooksPath; } return realpath(__DIR__ . '/..') . '/' . static::$defaultCoreHooksPath; }
/** * @param Event $event * @param string $edition * * @return string */ protected static function getDependencyMigrationPath(Event $event, $edition) { $ds = DIRECTORY_SEPARATOR; $vendorPath = $event->getComposer()->getConfig()->get('vendor-dir'); $communityPath = $vendorPath . $ds . 'akeneo' . $ds . $edition . $ds . 'upgrades' . $ds; return $communityPath; }
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); }