PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / vendor / composer / installers / src / Composer / Installers / BaseInstaller.php
presto-player / vendor / composer / installers / src / Composer / Installers Last commit date
AglInstaller.php 4 years ago AkauntingInstaller.php 4 years ago AnnotateCmsInstaller.php 4 years ago AsgardInstaller.php 4 years ago AttogramInstaller.php 4 years ago BaseInstaller.php 4 years ago BitrixInstaller.php 4 years ago BonefishInstaller.php 4 years ago BotbleInstaller.php 11 months ago CakePHPInstaller.php 11 months ago ChefInstaller.php 4 years ago CiviCrmInstaller.php 4 years ago ClanCatsFrameworkInstaller.php 4 years ago CockpitInstaller.php 4 years ago CodeIgniterInstaller.php 4 years ago Concrete5Installer.php 4 years ago ConcreteCMSInstaller.php 11 months ago CroogoInstaller.php 4 years ago DecibelInstaller.php 4 years ago DframeInstaller.php 4 years ago DokuWikiInstaller.php 4 years ago DolibarrInstaller.php 4 years ago DrupalInstaller.php 11 months ago ElggInstaller.php 4 years ago EliasisInstaller.php 4 years ago ExpressionEngineInstaller.php 4 years ago EzPlatformInstaller.php 4 years ago ForkCMSInstaller.php 11 months ago FuelInstaller.php 4 years ago FuelphpInstaller.php 4 years ago GravInstaller.php 4 years ago HuradInstaller.php 4 years ago ImageCMSInstaller.php 4 years ago Installer.php 11 months ago ItopInstaller.php 4 years ago KanboardInstaller.php 4 years ago KnownInstaller.php 4 years ago KodiCMSInstaller.php 4 years ago KohanaInstaller.php 4 years ago LanManagementSystemInstaller.php 4 years ago LaravelInstaller.php 4 years ago LavaLiteInstaller.php 4 years ago LithiumInstaller.php 4 years ago MODULEWorkInstaller.php 4 years ago MODXEvoInstaller.php 4 years ago MagentoInstaller.php 4 years ago MajimaInstaller.php 4 years ago MakoInstaller.php 4 years ago MantisBTInstaller.php 4 years ago MatomoInstaller.php 2 years ago MauticInstaller.php 4 years ago MayaInstaller.php 4 years ago MediaWikiInstaller.php 4 years ago MiaoxingInstaller.php 4 years ago MicroweberInstaller.php 4 years ago ModxInstaller.php 4 years ago MoodleInstaller.php 11 months ago OctoberInstaller.php 4 years ago OntoWikiInstaller.php 4 years ago OsclassInstaller.php 4 years ago OxidInstaller.php 4 years ago PPIInstaller.php 4 years ago PantheonInstaller.php 4 years ago PhiftyInstaller.php 4 years ago PhpBBInstaller.php 4 years ago PiwikInstaller.php 4 years ago PlentymarketsInstaller.php 4 years ago Plugin.php 4 years ago PortoInstaller.php 4 years ago PrestashopInstaller.php 4 years ago ProcessWireInstaller.php 4 years ago PuppetInstaller.php 4 years ago PxcmsInstaller.php 4 years ago RadPHPInstaller.php 4 years ago ReIndexInstaller.php 4 years ago Redaxo5Installer.php 4 years ago RedaxoInstaller.php 4 years ago RoundcubeInstaller.php 4 years ago SMFInstaller.php 4 years ago ShopwareInstaller.php 4 years ago SilverStripeInstaller.php 4 years ago SiteDirectInstaller.php 4 years ago StarbugInstaller.php 4 years ago SyDESInstaller.php 4 years ago SyliusInstaller.php 4 years ago TaoInstaller.php 4 years ago TastyIgniterInstaller.php 4 years ago TheliaInstaller.php 4 years ago TuskInstaller.php 4 years ago UserFrostingInstaller.php 4 years ago VanillaInstaller.php 4 years ago VgmcpInstaller.php 4 years ago WHMCSInstaller.php 4 years ago WinterInstaller.php 4 years ago WolfCMSInstaller.php 4 years ago WordPressInstaller.php 4 years ago YawikInstaller.php 4 years ago ZendInstaller.php 4 years ago ZikulaInstaller.php 4 years ago
BaseInstaller.php
138 lines
1 <?php
2
3 namespace Composer\Installers;
4
5 use Composer\IO\IOInterface;
6 use Composer\Composer;
7 use Composer\Package\PackageInterface;
8
9 abstract class BaseInstaller
10 {
11 /** @var array<string, string> */
12 protected $locations = array();
13 /** @var Composer */
14 protected $composer;
15 /** @var PackageInterface */
16 protected $package;
17 /** @var IOInterface */
18 protected $io;
19
20 /**
21 * Initializes base installer.
22 */
23 public function __construct(PackageInterface $package, Composer $composer, IOInterface $io)
24 {
25 $this->composer = $composer;
26 $this->package = $package;
27 $this->io = $io;
28 }
29
30 /**
31 * Return the install path based on package type.
32 */
33 public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string
34 {
35 $type = $this->package->getType();
36
37 $prettyName = $this->package->getPrettyName();
38 if (strpos($prettyName, '/') !== false) {
39 list($vendor, $name) = explode('/', $prettyName);
40 } else {
41 $vendor = '';
42 $name = $prettyName;
43 }
44
45 $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type'));
46
47 $extra = $package->getExtra();
48 if (!empty($extra['installer-name'])) {
49 $availableVars['name'] = $extra['installer-name'];
50 }
51
52 $extra = $this->composer->getPackage()->getExtra();
53 if (!empty($extra['installer-paths'])) {
54 $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor);
55 if ($customPath !== false) {
56 return $this->templatePath($customPath, $availableVars);
57 }
58 }
59
60 $packageType = substr($type, strlen($frameworkType) + 1);
61 $locations = $this->getLocations($frameworkType);
62 if (!isset($locations[$packageType])) {
63 throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type));
64 }
65
66 return $this->templatePath($locations[$packageType], $availableVars);
67 }
68
69 /**
70 * For an installer to override to modify the vars per installer.
71 *
72 * @param array<string, string> $vars This will normally receive array{name: string, vendor: string, type: string}
73 * @return array<string, string>
74 */
75 public function inflectPackageVars(array $vars): array
76 {
77 return $vars;
78 }
79
80 /**
81 * Gets the installer's locations
82 *
83 * @return array<string, string> map of package types => install path
84 */
85 public function getLocations(string $frameworkType)
86 {
87 return $this->locations;
88 }
89
90 /**
91 * Replace vars in a path
92 *
93 * @param array<string, string> $vars
94 */
95 protected function templatePath(string $path, array $vars = array()): string
96 {
97 if (strpos($path, '{') !== false) {
98 extract($vars);
99 preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches);
100 if (!empty($matches[1])) {
101 foreach ($matches[1] as $var) {
102 $path = str_replace('{$' . $var . '}', $$var, $path);
103 }
104 }
105 }
106
107 return $path;
108 }
109
110 /**
111 * Search through a passed paths array for a custom install path.
112 *
113 * @param array<string, string[]|string> $paths
114 * @return string|false
115 */
116 protected function mapCustomInstallPaths(array $paths, string $name, string $type, ?string $vendor = null)
117 {
118 foreach ($paths as $path => $names) {
119 $names = (array) $names;
120 if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) {
121 return $path;
122 }
123 }
124
125 return false;
126 }
127
128 protected function pregReplace(string $pattern, string $replacement, string $subject): string
129 {
130 $result = preg_replace($pattern, $replacement, $subject);
131 if (null === $result) {
132 throw new \RuntimeException('Failed to run preg_replace with '.$pattern.': '.preg_last_error());
133 }
134
135 return $result;
136 }
137 }
138