PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.0.21
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.0.21
1.2.74 1.2.73 1.2.72 1.2.71 1.2.70 1.2.69 1.2.68 1.2.67 1.2.66 1.2.65 1.2.64 1.2.63 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 All 174 releases
userswp / vendor / composer / installers / src / Composer / Installers / BaseInstaller.php

BaseInstaller.php in UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP 1.0.21, at vendor/composer/installers/src/Composer/Installers/BaseInstaller.php

137 lines 3.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Composer\Installers;
3
4 use Composer\IO\IOInterface;
5 use Composer\Composer;
6 use Composer\Package\PackageInterface;
7
8 abstract class BaseInstaller
9 {
10 protected $locations = array();
11 protected $composer;
12 protected $package;
13 protected $io;
14
15 /**
16 * Initializes base installer.
17 *
18 * @param PackageInterface $package
19 * @param Composer $composer
20 * @param IOInterface $io
21 */
22 public function __construct(PackageInterface $package = null, Composer $composer = null, IOInterface $io = null)
23 {
24 $this->composer = $composer;
25 $this->package = $package;
26 $this->io = $io;
27 }
28
29 /**
30 * Return the install path based on package type.
31 *
32 * @param PackageInterface $package
33 * @param string $frameworkType
34 * @return string
35 */
36 public function getInstallPath(PackageInterface $package, $frameworkType = '')
37 {
38 $type = $this->package->getType();
39
40 $prettyName = $this->package->getPrettyName();
41 if (strpos($prettyName, '/') !== false) {
42 list($vendor, $name) = explode('/', $prettyName);
43 } else {
44 $vendor = '';
45 $name = $prettyName;
46 }
47
48 $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type'));
49
50 $extra = $package->getExtra();
51 if (!empty($extra['installer-name'])) {
52 $availableVars['name'] = $extra['installer-name'];
53 }
54
55 if ($this->composer->getPackage()) {
56 $extra = $this->composer->getPackage()->getExtra();
57 if (!empty($extra['installer-paths'])) {
58 $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor);
59 if ($customPath !== false) {
60 return $this->templatePath($customPath, $availableVars);
61 }
62 }
63 }
64
65 $packageType = substr($type, strlen($frameworkType) + 1);
66 $locations = $this->getLocations();
67 if (!isset($locations[$packageType])) {
68 throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type));
69 }
70
71 return $this->templatePath($locations[$packageType], $availableVars);
72 }
73
74 /**
75 * For an installer to override to modify the vars per installer.
76 *
77 * @param array $vars
78 * @return array
79 */
80 public function inflectPackageVars($vars)
81 {
82 return $vars;
83 }
84
85 /**
86 * Gets the installer's locations
87 *
88 * @return array
89 */
90 public function getLocations()
91 {
92 return $this->locations;
93 }
94
95 /**
96 * Replace vars in a path
97 *
98 * @param string $path
99 * @param array $vars
100 * @return string
101 */
102 protected function templatePath($path, array $vars = array())
103 {
104 if (strpos($path, '{') !== false) {
105 extract($vars);
106 preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches);
107 if (!empty($matches[1])) {
108 foreach ($matches[1] as $var) {
109 $path = str_replace('{$' . $var . '}', $$var, $path);
110 }
111 }
112 }
113
114 return $path;
115 }
116
117 /**
118 * Search through a passed paths array for a custom install path.
119 *
120 * @param array $paths
121 * @param string $name
122 * @param string $type
123 * @param string $vendor = NULL
124 * @return string
125 */
126 protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL)
127 {
128 foreach ($paths as $path => $names) {
129 if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) {
130 return $path;
131 }
132 }
133
134 return false;
135 }
136 }
137