Example #1
1
 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);
 }
Example #3
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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);
         }
     }
 }
Example #9
0
 /**
  * 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);
 }
Example #11
0
 /**
  * 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');
 }
Example #12
0
 /**
  * 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');
 }
Example #13
0
 /**
  * @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);
     }
 }
Example #14
0
 /**
  * @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));
         }
     }
 }
Example #16
0
 /**
  * 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);
 }
Example #18
0
 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);
     }
 }
Example #21
0
 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);
 }
Example #22
0
 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());
 }
Example #24
0
    /**
     * 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");
        }
    }
Example #25
0
 /**
  * @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);
         }
     }
 }
Example #27
0
 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);
 }
Example #28
0
 /**
  * @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);
 }