comparison vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2 namespace Composer\Installers;
3
4 use Composer\DependencyResolver\Pool;
5 use Composer\Package\PackageInterface;
6
7 class CakePHPInstaller extends BaseInstaller
8 {
9 protected $locations = array(
10 'plugin' => 'Plugin/{$name}/',
11 );
12
13 /**
14 * Format package name to CamelCase
15 */
16 public function inflectPackageVars($vars)
17 {
18 if ($this->matchesCakeVersion('>=', '3.0.0')) {
19 return $vars;
20 }
21
22 $nameParts = explode('/', $vars['name']);
23 foreach ($nameParts as &$value) {
24 $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value));
25 $value = str_replace(array('-', '_'), ' ', $value);
26 $value = str_replace(' ', '', ucwords($value));
27 }
28 $vars['name'] = implode('/', $nameParts);
29
30 return $vars;
31 }
32
33 /**
34 * Change the default plugin location when cakephp >= 3.0
35 */
36 public function getLocations()
37 {
38 if ($this->matchesCakeVersion('>=', '3.0.0')) {
39 $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/';
40 }
41 return $this->locations;
42 }
43
44 /**
45 * Check if CakePHP version matches against a version
46 *
47 * @param string $matcher
48 * @param string $version
49 * @return bool
50 */
51 protected function matchesCakeVersion($matcher, $version)
52 {
53 if (class_exists('Composer\Semver\Constraint\MultiConstraint')) {
54 $multiClass = 'Composer\Semver\Constraint\MultiConstraint';
55 $constraintClass = 'Composer\Semver\Constraint\Constraint';
56 } else {
57 $multiClass = 'Composer\Package\LinkConstraint\MultiConstraint';
58 $constraintClass = 'Composer\Package\LinkConstraint\VersionConstraint';
59 }
60
61 $repositoryManager = $this->composer->getRepositoryManager();
62 if ($repositoryManager) {
63 $repos = $repositoryManager->getLocalRepository();
64 if (!$repos) {
65 return false;
66 }
67 $cake3 = new $multiClass(array(
68 new $constraintClass($matcher, $version),
69 new $constraintClass('!=', '9999999-dev'),
70 ));
71 $pool = new Pool('dev');
72 $pool->addRepository($repos);
73 $packages = $pool->whatProvides('cakephp/cakephp');
74 foreach ($packages as $package) {
75 $installed = new $constraintClass('=', $package->getVersion());
76 if ($cake3->matches($installed)) {
77 return true;
78 }
79 }
80 }
81 return false;
82 }
83 }