Mercurial > hg > isophonics-drupal-site
comparison vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Composer\Installers; | |
4 | |
5 use Composer\Util\Filesystem; | |
6 | |
7 /** | |
8 * Installer for Bitrix Framework. Supported types of extensions: | |
9 * - `bitrix-d7-module` — copy the module to directory `bitrix/modules/<vendor>.<name>`. | |
10 * - `bitrix-d7-component` — copy the component to directory `bitrix/components/<vendor>/<name>`. | |
11 * - `bitrix-d7-template` — copy the template to directory `bitrix/templates/<vendor>_<name>`. | |
12 * | |
13 * You can set custom path to directory with Bitrix kernel in `composer.json`: | |
14 * | |
15 * ```json | |
16 * { | |
17 * "extra": { | |
18 * "bitrix-dir": "s1/bitrix" | |
19 * } | |
20 * } | |
21 * ``` | |
22 * | |
23 * @author Nik Samokhvalov <nik@samokhvalov.info> | |
24 * @author Denis Kulichkin <onexhovia@gmail.com> | |
25 */ | |
26 class BitrixInstaller extends BaseInstaller | |
27 { | |
28 protected $locations = array( | |
29 'module' => '{$bitrix_dir}/modules/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) | |
30 'component' => '{$bitrix_dir}/components/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) | |
31 'theme' => '{$bitrix_dir}/templates/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) | |
32 'd7-module' => '{$bitrix_dir}/modules/{$vendor}.{$name}/', | |
33 'd7-component' => '{$bitrix_dir}/components/{$vendor}/{$name}/', | |
34 'd7-template' => '{$bitrix_dir}/templates/{$vendor}_{$name}/', | |
35 ); | |
36 | |
37 /** | |
38 * @var array Storage for informations about duplicates at all the time of installation packages. | |
39 */ | |
40 private static $checkedDuplicates = array(); | |
41 | |
42 /** | |
43 * {@inheritdoc} | |
44 */ | |
45 public function inflectPackageVars($vars) | |
46 { | |
47 if ($this->composer->getPackage()) { | |
48 $extra = $this->composer->getPackage()->getExtra(); | |
49 | |
50 if (isset($extra['bitrix-dir'])) { | |
51 $vars['bitrix_dir'] = $extra['bitrix-dir']; | |
52 } | |
53 } | |
54 | |
55 if (!isset($vars['bitrix_dir'])) { | |
56 $vars['bitrix_dir'] = 'bitrix'; | |
57 } | |
58 | |
59 return parent::inflectPackageVars($vars); | |
60 } | |
61 | |
62 /** | |
63 * {@inheritdoc} | |
64 */ | |
65 protected function templatePath($path, array $vars = array()) | |
66 { | |
67 $templatePath = parent::templatePath($path, $vars); | |
68 $this->checkDuplicates($templatePath, $vars); | |
69 | |
70 return $templatePath; | |
71 } | |
72 | |
73 /** | |
74 * Duplicates search packages. | |
75 * | |
76 * @param string $path | |
77 * @param array $vars | |
78 */ | |
79 protected function checkDuplicates($path, array $vars = array()) | |
80 { | |
81 $packageType = substr($vars['type'], strlen('bitrix') + 1); | |
82 $localDir = explode('/', $vars['bitrix_dir']); | |
83 array_pop($localDir); | |
84 $localDir[] = 'local'; | |
85 $localDir = implode('/', $localDir); | |
86 | |
87 $oldPath = str_replace( | |
88 array('{$bitrix_dir}', '{$name}'), | |
89 array($localDir, $vars['name']), | |
90 $this->locations[$packageType] | |
91 ); | |
92 | |
93 if (in_array($oldPath, static::$checkedDuplicates)) { | |
94 return; | |
95 } | |
96 | |
97 if ($oldPath !== $path && file_exists($oldPath) && $this->io && $this->io->isInteractive()) { | |
98 | |
99 $this->io->writeError(' <error>Duplication of packages:</error>'); | |
100 $this->io->writeError(' <info>Package ' . $oldPath . ' will be called instead package ' . $path . '</info>'); | |
101 | |
102 while (true) { | |
103 switch ($this->io->ask(' <info>Delete ' . $oldPath . ' [y,n,?]?</info> ', '?')) { | |
104 case 'y': | |
105 $fs = new Filesystem(); | |
106 $fs->removeDirectory($oldPath); | |
107 break 2; | |
108 | |
109 case 'n': | |
110 break 2; | |
111 | |
112 case '?': | |
113 default: | |
114 $this->io->writeError(array( | |
115 ' y - delete package ' . $oldPath . ' and to continue with the installation', | |
116 ' n - don\'t delete and to continue with the installation', | |
117 )); | |
118 $this->io->writeError(' ? - print help'); | |
119 break; | |
120 } | |
121 } | |
122 } | |
123 | |
124 static::$checkedDuplicates[] = $oldPath; | |
125 } | |
126 } |