*/
class CRM_Extension_ClassLoader {
+ /**
+ * List of class-loader features that are valid in this version of Civi.
+ *
+ * This may be useful for some extensions which enable/disable polyfills based on environment.
+ */
+ const FEATURES = ',psr0,psr4,';
+
/**
* @var CRM_Extension_Mapper
*/
if (!empty($info->classloader)) {
foreach ($info->classloader as $mapping) {
switch ($mapping['type']) {
+ case 'psr0':
+ $loader->add($mapping['prefix'], CRM_Utils_File::addTrailingSlash($path . '/' . $mapping['path']));
+ break;
+
case 'psr4':
$loader->addPsr4($mapping['prefix'], $path . '/' . $mapping['path']);
break;
'path' => (string) $psr4->attributes()->path,
];
}
+ foreach ($val->psr0 as $psr0) {
+ $this->classloader[] = [
+ 'type' => 'psr0',
+ 'prefix' => (string) $psr0->attributes()->prefix,
+ 'path' => (string) $psr0->attributes()->path,
+ ];
+ }
}
elseif ($attr === 'tags') {
$this->tags = [];
public function testGood_string_extras() {
$data = "<extension key='test.bar' type='module'><file>testbar</file>
- <classloader><psr4 prefix=\"Civi\\\" path=\"Civi\"/></classloader>
+ <classloader>
+ <psr4 prefix=\"Civi\\\" path=\"Civi\"/>
+ <psr0 prefix=\"CRM_\" path=\"\"/>
+ </classloader>
<requires><ext>org.civicrm.a</ext><ext>org.civicrm.b</ext></requires>
</extension>
";
$this->assertEquals('testbar', $info->file);
$this->assertEquals('Civi\\', $info->classloader[0]['prefix']);
$this->assertEquals('Civi', $info->classloader[0]['path']);
+ $this->assertEquals('psr4', $info->classloader[0]['type']);
+ $this->assertEquals('CRM_', $info->classloader[1]['prefix']);
+ $this->assertEquals('', $info->classloader[1]['path']);
+ $this->assertEquals('psr0', $info->classloader[1]['type']);
$this->assertEquals(['org.civicrm.a', 'org.civicrm.b'], $info->requires);
}