ScaffoldOptions.php in Drupal 9
Same filename and directory in other branches
Namespace
Drupal\Composer\Plugin\ScaffoldFile
composer/Plugin/Scaffold/ScaffoldOptions.phpView source
<?php
namespace Drupal\Composer\Plugin\Scaffold;
/**
* Per-project options from the 'extras' section of the composer.json file.
*
* Projects that describe scaffold files do so via their scaffold options. This
* data is pulled from the 'drupal-scaffold' portion of the extras section of
* the project data.
*
* @internal
*/
class ScaffoldOptions {
/**
* The raw data from the 'extras' section of the top-level composer.json file.
*
* @var array
*/
protected $options = [];
/**
* ScaffoldOptions constructor.
*
* @param array $options
* The scaffold options taken from the 'drupal-scaffold' section.
*/
protected function __construct(array $options) {
$this->options = $options + [
"allowed-packages" => [],
"locations" => [],
"symlink" => FALSE,
"file-mapping" => [],
];
// Define any default locations.
$this->options['locations'] += [
'project-root' => '.',
'web-root' => '.',
];
}
/**
* Determines if the provided 'extras' section has scaffold options.
*
* @param array $extras
* The contents of the 'extras' section.
*
* @return bool
* True if scaffold options have been declared
*/
public static function hasOptions(array $extras) {
return array_key_exists('drupal-scaffold', $extras);
}
/**
* Creates a scaffold options object.
*
* @param array $extras
* The contents of the 'extras' section.
*
* @return self
* The scaffold options object representing the provided scaffold options
*/
public static function create(array $extras) {
$options = static::hasOptions($extras) ? $extras['drupal-scaffold'] : [];
return new self($options);
}
/**
* Creates a new scaffold options object with some values overridden.
*
* @param array $options
* Override values.
*
* @return self
* The scaffold options object representing the provided scaffold options
*/
protected function override(array $options) {
return new self($options + $this->options);
}
/**
* Creates a new scaffold options object with an overridden 'symlink' value.
*
* @param bool $symlink
* Whether symlinking should be enabled or not.
*
* @return self
* The scaffold options object representing the provided scaffold options
*/
public function overrideSymlink($symlink) {
return $this
->override([
'symlink' => $symlink,
]);
}
/**
* Determines whether any allowed packages were defined.
*
* @return bool
* Whether there are allowed packages
*/
public function hasAllowedPackages() {
return !empty($this
->allowedPackages());
}
/**
* Gets allowed packages from these options.
*
* @return array
* The list of allowed packages
*/
public function allowedPackages() {
return $this->options['allowed-packages'];
}
/**
* Gets the location mapping table, e.g. 'webroot' => './'.
*
* @return array
* A map of name : location values
*/
public function locations() {
return $this->options['locations'];
}
/**
* Determines whether a given named location is defined.
*
* @param string $name
* The location name to search for.
*
* @return bool
* True if the specified named location exist.
*/
protected function hasLocation($name) {
return array_key_exists($name, $this
->locations());
}
/**
* Gets a specific named location.
*
* @param string $name
* The name of the location to fetch.
*
* @return string
* The value of the provided named location
*/
public function getLocation($name) {
return $this
->hasLocation($name) ? $this
->locations()[$name] : FALSE;
}
/**
* Determines if symlink mode is set.
*
* @return bool
* Whether or not 'symlink' mode
*/
public function symlink() {
return $this->options['symlink'];
}
/**
* Determines if there are file mappings.
*
* @return bool
* Whether or not the scaffold options contain any file mappings
*/
public function hasFileMapping() {
return !empty($this
->fileMapping());
}
/**
* Returns the actual file mappings.
*
* @return array
* File mappings for just this config type.
*/
public function fileMapping() {
return $this->options['file-mapping'];
}
/**
* Determines if there is defined a value for the 'gitignore' option.
*
* @return bool
* Whether or not there is a 'gitignore' option setting
*/
public function hasGitIgnore() {
return isset($this->options['gitignore']);
}
/**
* Gets the value of the 'gitignore' option.
*
* @return bool
* The 'gitignore' option, or TRUE if undefined.
*/
public function gitIgnore() {
return $this
->hasGitIgnore() ? $this->options['gitignore'] : TRUE;
}
}
Classes
Name | Description |
---|---|
ScaffoldOptions | Per-project options from the 'extras' section of the composer.json file. |