Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
41.67% |
5 / 12 |
CRAP | |
35.14% |
13 / 37 |
Extension | |
0.00% |
0 / 1 |
|
41.67% |
5 / 12 |
106.42 | |
35.14% |
13 / 37 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
getType | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getPath | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getPathname | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getFilename | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getExtensionPathname | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
getExtensionFilename | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
load | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
__call | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
serialize | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
unserialize | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 9 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Extension\Extension. | |
*/ | |
namespace Drupal\Core\Extension; | |
/** | |
* Defines an extension (file) object. | |
*/ | |
class Extension implements \Serializable { | |
/** | |
* The type of the extension (e.g., 'module'). | |
* | |
* @var string | |
*/ | |
protected $type; | |
/** | |
* The relative pathname of the extension (e.g., 'core/modules/node/node.info.yml'). | |
* | |
* @var string | |
*/ | |
protected $pathname; | |
/** | |
* The filename of the main extension file (e.g., 'node.module'). | |
* | |
* @var string|null | |
*/ | |
protected $filename; | |
/** | |
* An SplFileInfo instance for the extension's info file. | |
* | |
* Note that SplFileInfo is a PHP resource and resources cannot be serialized. | |
* | |
* @var \SplFileInfo | |
*/ | |
protected $splFileInfo; | |
/** | |
* The app root. | |
* | |
* @var string | |
*/ | |
protected $root; | |
/** | |
* Constructs a new Extension object. | |
* | |
* @param string $root | |
* The app root. | |
* @param string $type | |
* The type of the extension; e.g., 'module'. | |
* @param string $pathname | |
* The relative path and filename of the extension's info file; e.g., | |
* 'core/modules/node/node.info.yml'. | |
* @param string $filename | |
* (optional) The filename of the main extension file; e.g., 'node.module'. | |
*/ | |
public function __construct($root, $type, $pathname, $filename = NULL) { | |
$this->root = $root; | |
$this->type = $type; | |
$this->pathname = $pathname; | |
$this->filename = $filename; | |
} | |
/** | |
* Returns the type of the extension. | |
* | |
* @return string | |
*/ | |
public function getType() { | |
return $this->type; | |
} | |
/** | |
* Returns the internal name of the extension. | |
* | |
* @return string | |
*/ | |
public function getName() { | |
return basename($this->pathname, '.info.yml'); | |
} | |
/** | |
* Returns the relative path of the extension. | |
* | |
* @return string | |
*/ | |
public function getPath() { | |
return dirname($this->pathname); | |
} | |
/** | |
* Returns the relative path and filename of the extension's info file. | |
* | |
* @return string | |
*/ | |
public function getPathname() { | |
return $this->pathname; | |
} | |
/** | |
* Returns the filename of the extension's info file. | |
* | |
* @return string | |
*/ | |
public function getFilename() { | |
return basename($this->pathname); | |
} | |
/** | |
* Returns the relative path of the main extension file, if any. | |
* | |
* @return string|null | |
*/ | |
public function getExtensionPathname() { | |
if ($this->filename) { | |
return $this->getPath() . '/' . $this->filename; | |
} | |
} | |
/** | |
* Returns the name of the main extension file, if any. | |
* | |
* @return string|null | |
*/ | |
public function getExtensionFilename() { | |
return $this->filename; | |
} | |
/** | |
* Loads the main extension file, if any. | |
* | |
* @return bool | |
* TRUE if this extension has a main extension file, FALSE otherwise. | |
*/ | |
public function load() { | |
if ($this->filename) { | |
include_once $this->root . '/' . $this->getPath() . '/' . $this->filename; | |
return TRUE; | |
} | |
return FALSE; | |
} | |
/** | |
* Re-routes method calls to SplFileInfo. | |
* | |
* Offers all SplFileInfo methods to consumers; e.g., $extension->getMTime(). | |
*/ | |
public function __call($method, array $args) { | |
if (!isset($this->splFileInfo)) { | |
$this->splFileInfo = new \SplFileInfo($this->pathname); | |
} | |
return call_user_func_array(array($this->splFileInfo, $method), $args); | |
} | |
/** | |
* Implements Serializable::serialize(). | |
* | |
* Serializes the Extension object in the most optimized way. | |
*/ | |
public function serialize() { | |
// Don't serialize the app root, since this could change if the install is | |
// moved. | |
$data = array( | |
'type' => $this->type, | |
'pathname' => $this->pathname, | |
'filename' => $this->filename, | |
); | |
// @todo ThemeHandler::listInfo(), ThemeHandler::rebuildThemeData(), and | |
// system_list() are adding custom properties to the Extension object. | |
$info = new \ReflectionObject($this); | |
foreach ($info->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) { | |
$data[$property->getName()] = $property->getValue($this); | |
} | |
return serialize($data); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function unserialize($data) { | |
$data = unserialize($data); | |
// Get the app root from the container. | |
$this->root = DRUPAL_ROOT; | |
$this->type = $data['type']; | |
$this->pathname = $data['pathname']; | |
$this->filename = $data['filename']; | |
// @todo ThemeHandler::listInfo(), ThemeHandler::rebuildThemeData(), and | |
// system_list() are adding custom properties to the Extension object. | |
foreach ($data as $property => $value) { | |
if (!isset($this->$property)) { | |
$this->$property = $value; | |
} | |
} | |
} | |
} |