public function ScaffoldFileCollection::__construct in Drupal 8
Same name and namespace in other branches
- 9 composer/Plugin/Scaffold/Operations/ScaffoldFileCollection.php \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection::__construct()
ScaffoldFileCollection constructor.
Parameters
\Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][] $file_mappings: A multidimensional array of file mappings.
\Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements: An object with the location mappings (e.g. [web-root]).
File
- composer/
Plugin/ Scaffold/ Operations/ ScaffoldFileCollection.php, line 37
Class
- ScaffoldFileCollection
- Collection of scaffold files.
Namespace
Drupal\Composer\Plugin\Scaffold\OperationsCode
public function __construct(array $file_mappings, Interpolator $location_replacements) {
// Collection of all destination paths to be scaffolded. Used to determine
// when two projects scaffold the same file and we have to either replace or
// combine them together.
// @see OperationInterface::scaffoldOverExistingTarget().
$scaffoldFiles = [];
// Build the list of ScaffoldFileInfo objects by project.
foreach ($file_mappings as $package_name => $package_file_mappings) {
foreach ($package_file_mappings as $destination_rel_path => $op) {
$destination = ScaffoldFilePath::destinationPath($package_name, $destination_rel_path, $location_replacements);
// If there was already a scaffolding operation happening at this path,
// allow the new operation to decide how to handle the override.
// Usually, the new operation will replace whatever was there before.
if (isset($scaffoldFiles[$destination_rel_path])) {
$previous_scaffold_file = $scaffoldFiles[$destination_rel_path];
$op = $op
->scaffoldOverExistingTarget($previous_scaffold_file
->op());
// Remove the previous op so we only touch the destination once.
$message = " - Skip <info>[dest-rel-path]</info>: overridden in <comment>{$package_name}</comment>";
$this->scaffoldFilesByProject[$previous_scaffold_file
->packageName()][$destination_rel_path] = new ScaffoldFileInfo($destination, new SkipOp($message));
}
else {
$op = $op
->scaffoldAtNewLocation($destination);
}
// Combine the scaffold operation with the destination and record it.
$scaffold_file = new ScaffoldFileInfo($destination, $op);
$scaffoldFiles[$destination_rel_path] = $scaffold_file;
$this->scaffoldFilesByProject[$package_name][$destination_rel_path] = $scaffold_file;
}
}
}