/** * Reads and merges in existing files for a given package or profile. */ protected function preparePackage(Package $package, array $existing_packages, FeaturesBundleInterface $bundle = NULL) { if (isset($existing_packages[$package->getMachineName()])) { $existing_directory = $existing_packages[$package->getMachineName()]; // Scan for all files. $files = file_scan_directory($existing_directory, '/.*/'); foreach ($files as $file) { // Skip files in the any existing configuration directory, as these // will be replaced. foreach (array_keys($this->featuresManager->getExtensionStorages()->getExtensionStorages()) as $directory) { if (strpos($file->uri, $directory) !== FALSE) { continue 2; } } // Merge in the info file. if ($file->name == $package->getMachineName() . '.info') { $files = $package->getFiles(); $files['info']['string'] = $this->mergeInfoFile($package->getFiles()['info']['string'], $file->uri); $package->setFiles($files); } else { // Determine if the file is within a subdirectory of the // extension's directory. $file_directory = dirname($file->uri); if ($file_directory !== $existing_directory) { $subdirectory = substr($file_directory, strlen($existing_directory) + 1); } else { $subdirectory = NULL; } $package->appendFile(['filename' => $file->filename, 'subdirectory' => $subdirectory, 'string' => file_get_contents($file->uri)]); } } } }
/** * Reads and merges in existing files for a given package or profile. * * @param \Drupal\features\Package &$package * The package. * @param array $existing_packages * An array of existing packages. * @param \Drupal\features\FeaturesBundleInterface $bundle * The bundle the package belongs to. */ protected function preparePackage(Package $package, array $existing_packages, FeaturesBundleInterface $bundle = NULL) { // If this package is already present, prepare files. if (isset($existing_packages[$package->getMachineName()])) { $existing_directory = $existing_packages[$package->getMachineName()]; $package->setDirectory($existing_directory); // Merge in the info file. $info_file_uri = $this->root . '/' . $existing_directory . '/' . $package->getMachineName() . '.info.yml'; if (file_exists($info_file_uri)) { $files = $package->getFiles(); $files['info']['string'] = $this->mergeInfoFile($package->getFiles()['info']['string'], $info_file_uri); $package->setFiles($files); } // Remove the config directories, as they will be replaced. foreach (array_keys($this->featuresManager->getExtensionStorages()->getExtensionStorages()) as $directory) { $config_directory = $this->root . '/' . $existing_directory . '/' . $directory; if (is_dir($config_directory)) { file_unmanaged_delete_recursive($config_directory); } } } }