Chris@0
|
1 <?php
|
Chris@0
|
2 namespace Composer\Installers;
|
Chris@0
|
3
|
Chris@0
|
4 use Composer\Package\PackageInterface;
|
Chris@0
|
5
|
Chris@0
|
6 class OxidInstaller extends BaseInstaller
|
Chris@0
|
7 {
|
Chris@0
|
8 const VENDOR_PATTERN = '/^modules\/(?P<vendor>.+)\/.+/';
|
Chris@0
|
9
|
Chris@0
|
10 protected $locations = array(
|
Chris@0
|
11 'module' => 'modules/{$name}/',
|
Chris@0
|
12 'theme' => 'application/views/{$name}/',
|
Chris@0
|
13 'out' => 'out/{$name}/',
|
Chris@0
|
14 );
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * getInstallPath
|
Chris@0
|
18 *
|
Chris@0
|
19 * @param PackageInterface $package
|
Chris@0
|
20 * @param string $frameworkType
|
Chris@0
|
21 * @return void
|
Chris@0
|
22 */
|
Chris@0
|
23 public function getInstallPath(PackageInterface $package, $frameworkType = '')
|
Chris@0
|
24 {
|
Chris@0
|
25 $installPath = parent::getInstallPath($package, $frameworkType);
|
Chris@0
|
26 $type = $this->package->getType();
|
Chris@0
|
27 if ($type === 'oxid-module') {
|
Chris@0
|
28 $this->prepareVendorDirectory($installPath);
|
Chris@0
|
29 }
|
Chris@0
|
30 return $installPath;
|
Chris@0
|
31 }
|
Chris@0
|
32
|
Chris@0
|
33 /**
|
Chris@0
|
34 * prepareVendorDirectory
|
Chris@0
|
35 *
|
Chris@0
|
36 * Makes sure there is a vendormetadata.php file inside
|
Chris@0
|
37 * the vendor folder if there is a vendor folder.
|
Chris@0
|
38 *
|
Chris@0
|
39 * @param string $installPath
|
Chris@0
|
40 * @return void
|
Chris@0
|
41 */
|
Chris@0
|
42 protected function prepareVendorDirectory($installPath)
|
Chris@0
|
43 {
|
Chris@0
|
44 $matches = '';
|
Chris@0
|
45 $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches);
|
Chris@0
|
46 if (!$hasVendorDirectory) {
|
Chris@0
|
47 return;
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 $vendorDirectory = $matches['vendor'];
|
Chris@0
|
51 $vendorPath = getcwd() . '/modules/' . $vendorDirectory;
|
Chris@0
|
52 if (!file_exists($vendorPath)) {
|
Chris@0
|
53 mkdir($vendorPath, 0755, true);
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@0
|
56 $vendorMetaDataPath = $vendorPath . '/vendormetadata.php';
|
Chris@0
|
57 touch($vendorMetaDataPath);
|
Chris@0
|
58 }
|
Chris@0
|
59 }
|