You are here

class Installer in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/composer/installers/src/Composer/Installers/Installer.php \Composer\Installers\Installer

Hierarchy

  • class \Composer\Installers\Installer extends \Composer\Installer\LibraryInstaller

Expanded class hierarchy of Installer

1 file declares its use of Installer
InstallerTest.php in vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php

File

vendor/composer/installers/src/Composer/Installers/Installer.php, line 8

Namespace

Composer\Installers
View source
class Installer extends LibraryInstaller {

  /**
   * Package types to installer class map
   *
   * @var array
   */
  private $supportedTypes = array(
    'aimeos' => 'AimeosInstaller',
    'asgard' => 'AsgardInstaller',
    'agl' => 'AglInstaller',
    'annotatecms' => 'AnnotateCmsInstaller',
    'bitrix' => 'BitrixInstaller',
    'cakephp' => 'CakePHPInstaller',
    'chef' => 'ChefInstaller',
    'ccframework' => 'ClanCatsFrameworkInstaller',
    'codeigniter' => 'CodeIgniterInstaller',
    'concrete5' => 'Concrete5Installer',
    'craft' => 'CraftInstaller',
    'croogo' => 'CroogoInstaller',
    'dokuwiki' => 'DokuWikiInstaller',
    'dolibarr' => 'DolibarrInstaller',
    'drupal' => 'DrupalInstaller',
    'elgg' => 'ElggInstaller',
    'fuel' => 'FuelInstaller',
    'fuelphp' => 'FuelphpInstaller',
    'grav' => 'GravInstaller',
    'hurad' => 'HuradInstaller',
    'joomla' => 'JoomlaInstaller',
    'kirby' => 'KirbyInstaller',
    'kohana' => 'KohanaInstaller',
    'laravel' => 'LaravelInstaller',
    'lithium' => 'LithiumInstaller',
    'magento' => 'MagentoInstaller',
    'mako' => 'MakoInstaller',
    'mediawiki' => 'MediaWikiInstaller',
    'microweber' => 'MicroweberInstaller',
    'modulework' => 'MODULEWorkInstaller',
    'modxevo' => 'MODXEvoInstaller',
    'moodle' => 'MoodleInstaller',
    'october' => 'OctoberInstaller',
    'oxid' => 'OxidInstaller',
    'phpbb' => 'PhpBBInstaller',
    'pimcore' => 'PimcoreInstaller',
    'piwik' => 'PiwikInstaller',
    'ppi' => 'PPIInstaller',
    'puppet' => 'PuppetInstaller',
    'redaxo' => 'RedaxoInstaller',
    'roundcube' => 'RoundcubeInstaller',
    'shopware' => 'ShopwareInstaller',
    'silverstripe' => 'SilverStripeInstaller',
    'smf' => 'SMFInstaller',
    'symfony1' => 'Symfony1Installer',
    'thelia' => 'TheliaInstaller',
    'tusk' => 'TuskInstaller',
    'typo3-cms' => 'TYPO3CmsInstaller',
    'typo3-flow' => 'TYPO3FlowInstaller',
    'whmcs' => 'WHMCSInstaller',
    'wolfcms' => 'WolfCMSInstaller',
    'wordpress' => 'WordPressInstaller',
    'zend' => 'ZendInstaller',
    'zikula' => 'ZikulaInstaller',
    'prestashop' => 'PrestashopInstaller',
  );

  /**
   * {@inheritDoc}
   */
  public function getInstallPath(PackageInterface $package) {
    $type = $package
      ->getType();
    $frameworkType = $this
      ->findFrameworkType($type);
    if ($frameworkType === false) {
      throw new \InvalidArgumentException('Sorry the package type of this package is not yet supported.');
    }
    $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType];
    $installer = new $class($package, $this->composer);
    return $installer
      ->getInstallPath($package, $frameworkType);
  }
  public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) {
    if (!$repo
      ->hasPackage($package)) {
      throw new \InvalidArgumentException('Package is not installed: ' . $package);
    }
    $repo
      ->removePackage($package);
    $installPath = $this
      ->getInstallPath($package);
    $this->io
      ->write(sprintf('Deleting %s - %s', $installPath, $this->filesystem
      ->removeDirectory($installPath) ? '<comment>deleted</comment>' : '<error>not deleted</error>'));
  }

  /**
   * {@inheritDoc}
   */
  public function supports($packageType) {
    $frameworkType = $this
      ->findFrameworkType($packageType);
    if ($frameworkType === false) {
      return false;
    }
    $locationPattern = $this
      ->getLocationPattern($frameworkType);
    return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1;
  }

  /**
   * Finds a supported framework type if it exists and returns it
   *
   * @param  string $type
   * @return string
   */
  protected function findFrameworkType($type) {
    $frameworkType = false;
    krsort($this->supportedTypes);
    foreach ($this->supportedTypes as $key => $val) {
      if ($key === substr($type, 0, strlen($key))) {
        $frameworkType = substr($type, 0, strlen($key));
        break;
      }
    }
    return $frameworkType;
  }

  /**
   * Get the second part of the regular expression to check for support of a
   * package type
   *
   * @param  string $frameworkType
   * @return string
   */
  protected function getLocationPattern($frameworkType) {
    $pattern = false;
    if (!empty($this->supportedTypes[$frameworkType])) {
      $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType];

      /** @var BaseInstaller $framework */
      $framework = new $frameworkClass(null, $this->composer);
      $locations = array_keys($framework
        ->getLocations());
      $pattern = $locations ? '(' . implode('|', $locations) . ')' : false;
    }
    return $pattern ?: '(\\w+)';
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Installer::$supportedTypes private property Package types to installer class map
Installer::findFrameworkType protected function Finds a supported framework type if it exists and returns it
Installer::getInstallPath public function
Installer::getLocationPattern protected function Get the second part of the regular expression to check for support of a package type
Installer::supports public function
Installer::uninstall public function