60 lines
1.4 KiB
PHP
60 lines
1.4 KiB
PHP
|
<?php
|
||
|
namespace Composer\Installers;
|
||
|
|
||
|
use Composer\Package\PackageInterface;
|
||
|
|
||
|
class OxidInstaller extends BaseInstaller
|
||
|
{
|
||
|
const VENDOR_PATTERN = '/^modules\/(?P<vendor>.+)\/.+/';
|
||
|
|
||
|
protected $locations = array(
|
||
|
'module' => 'modules/{$name}/',
|
||
|
'theme' => 'application/views/{$name}/',
|
||
|
'out' => 'out/{$name}/',
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* getInstallPath
|
||
|
*
|
||
|
* @param PackageInterface $package
|
||
|
* @param string $frameworkType
|
||
|
* @return void
|
||
|
*/
|
||
|
public function getInstallPath(PackageInterface $package, $frameworkType = '')
|
||
|
{
|
||
|
$installPath = parent::getInstallPath($package, $frameworkType);
|
||
|
$type = $this->package->getType();
|
||
|
if ($type === 'oxid-module') {
|
||
|
$this->prepareVendorDirectory($installPath);
|
||
|
}
|
||
|
return $installPath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* prepareVendorDirectory
|
||
|
*
|
||
|
* Makes sure there is a vendormetadata.php file inside
|
||
|
* the vendor folder if there is a vendor folder.
|
||
|
*
|
||
|
* @param string $installPath
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function prepareVendorDirectory($installPath)
|
||
|
{
|
||
|
$matches = '';
|
||
|
$hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches);
|
||
|
if (!$hasVendorDirectory) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$vendorDirectory = $matches['vendor'];
|
||
|
$vendorPath = getcwd() . '/modules/' . $vendorDirectory;
|
||
|
if (!file_exists($vendorPath)) {
|
||
|
mkdir($vendorPath, 0755, true);
|
||
|
}
|
||
|
|
||
|
$vendorMetaDataPath = $vendorPath . '/vendormetadata.php';
|
||
|
touch($vendorMetaDataPath);
|
||
|
}
|
||
|
}
|