Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / composer / installers / src / Composer / Installers / Installer.php
index a9d49f34632cbc53283efb7fe85e438b8cd92e50..352cb7fae500c595f9804e25594016cad2461244 100644 (file)
@@ -1,13 +1,18 @@
 <?php
+
 namespace Composer\Installers;
 
-use Composer\IO\IOInterface;
+use Composer\Composer;
+use Composer\Installer\BinaryInstaller;
 use Composer\Installer\LibraryInstaller;
+use Composer\IO\IOInterface;
 use Composer\Package\PackageInterface;
 use Composer\Repository\InstalledRepositoryInterface;
+use Composer\Util\Filesystem;
 
 class Installer extends LibraryInstaller
 {
+
     /**
      * Package types to installer class map
      *
@@ -23,6 +28,7 @@ class Installer extends LibraryInstaller
         'bonefish'     => 'BonefishInstaller',
         'cakephp'      => 'CakePHPInstaller',
         'chef'         => 'ChefInstaller',
+        'civicrm'      => 'CiviCrmInstaller',
         'ccframework'  => 'ClanCatsFrameworkInstaller',
         'cockpit'      => 'CockpitInstaller',
         'codeigniter'  => 'CodeIgniterInstaller',
@@ -102,6 +108,30 @@ class Installer extends LibraryInstaller
         'prestashop'   => 'PrestashopInstaller'
     );
 
+    /**
+     * Installer constructor.
+     *
+     * Disables installers specified in main composer extra installer-disable
+     * list
+     *
+     * @param IOInterface          $io
+     * @param Composer             $composer
+     * @param string               $type
+     * @param Filesystem|null      $filesystem
+     * @param BinaryInstaller|null $binaryInstaller
+     */
+    public function __construct(
+        IOInterface $io,
+        Composer $composer,
+        $type = 'library',
+        Filesystem $filesystem = null,
+        BinaryInstaller $binaryInstaller = null
+    ) {
+        parent::__construct($io, $composer, $type, $filesystem,
+            $binaryInstaller);
+        $this->removeDisabledInstallers();
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -197,4 +227,48 @@ class Installer extends LibraryInstaller
     {
         return $this->io;
     }
+
+    /**
+     * Look for installers set to be disabled in composer's extra config and
+     * remove them from the list of supported installers.
+     *
+     * Globals:
+     *  - true, "all", and "*" - disable all installers.
+     *  - false - enable all installers (useful with
+     *     wikimedia/composer-merge-plugin or similar)
+     *
+     * @return void
+     */
+    protected function removeDisabledInstallers()
+    {
+        $extra = $this->composer->getPackage()->getExtra();
+
+        if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) {
+            // No installers are disabled
+            return;
+        }
+
+        // Get installers to disable
+        $disable = $extra['installer-disable'];
+
+        // Ensure $disabled is an array
+        if (!is_array($disable)) {
+            $disable = array($disable);
+        }
+
+        // Check which installers should be disabled
+        $all = array(true, "all", "*");
+        $intersect = array_intersect($all, $disable);
+        if (!empty($intersect)) {
+            // Disable all installers
+            $this->supportedTypes = array();
+        } else {
+            // Disable specified installers
+            foreach ($disable as $key => $installer) {
+                if (is_string($installer) && key_exists($installer, $this->supportedTypes)) {
+                    unset($this->supportedTypes[$installer]);
+                }
+            }
+        }
+    }
 }