2 namespace Composer\Installers;
4 use Composer\DependencyResolver\Pool;
6 class CakePHPInstaller extends BaseInstaller
8 protected $locations = array(
9 'plugin' => 'Plugin/{$name}/',
13 * Format package name to CamelCase
15 public function inflectPackageVars($vars)
17 if ($this->matchesCakeVersion('>=', '3.0.0')) {
21 $nameParts = explode('/', $vars['name']);
22 foreach ($nameParts as &$value) {
23 $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value));
24 $value = str_replace(array('-', '_'), ' ', $value);
25 $value = str_replace(' ', '', ucwords($value));
27 $vars['name'] = implode('/', $nameParts);
33 * Change the default plugin location when cakephp >= 3.0
35 public function getLocations()
37 if ($this->matchesCakeVersion('>=', '3.0.0')) {
38 $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/';
40 return $this->locations;
44 * Check if CakePHP version matches against a version
46 * @param string $matcher
47 * @param string $version
50 protected function matchesCakeVersion($matcher, $version)
52 if (class_exists('Composer\Semver\Constraint\MultiConstraint')) {
53 $multiClass = 'Composer\Semver\Constraint\MultiConstraint';
54 $constraintClass = 'Composer\Semver\Constraint\Constraint';
56 $multiClass = 'Composer\Package\LinkConstraint\MultiConstraint';
57 $constraintClass = 'Composer\Package\LinkConstraint\VersionConstraint';
60 $repositoryManager = $this->composer->getRepositoryManager();
61 if ($repositoryManager) {
62 $repos = $repositoryManager->getLocalRepository();
66 $cake3 = new $multiClass(array(
67 new $constraintClass($matcher, $version),
68 new $constraintClass('!=', '9999999-dev'),
70 $pool = new Pool('dev');
71 $pool->addRepository($repos);
72 $packages = $pool->whatProvides('cakephp/cakephp');
73 foreach ($packages as $package) {
74 $installed = new $constraintClass('=', $package->getVersion());
75 if ($cake3->matches($installed)) {