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; } }