function ScaffoldFileCollection::__construct

Same name in other branches
  1. 9 composer/Plugin/Scaffold/Operations/ScaffoldFileCollection.php \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection::__construct()
  2. 10 composer/Plugin/Scaffold/Operations/ScaffoldFileCollection.php \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection::__construct()
  3. 11.x 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\Operations

Code

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

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.