config_packager-8.x-1.x-dev/src/ConfigPackagerGenerationMethodBase.php

src/ConfigPackagerGenerationMethodBase.php
<?php

/**
 * @file
 * Contains \Drupal\config_packager\ConfigPackagerGenerationMethodBase.
 */

namespace Drupal\config_packager;

use Drupal\Component\Serialization\Yaml;
use Drupal\config_packager\ConfigPackagerManager;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;

/**
 * Base class for package assignment methods.
 */
abstract class ConfigPackagerGenerationMethodBase implements ConfigPackagerGenerationMethodInterface {
  use StringTranslationTrait;

  /**
   * The config packager manager.
   *
   * @var \Drupal\config_packager\ConfigPackagerManagerInterface
   */
  protected $configPackagerManager;

  /**
   * The configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * {@inheritdoc}
   */
  public function setConfigPackagerManager(ConfigPackagerManagerInterface $config_packager_manager) {
    $this->configPackagerManager = $config_packager_manager;
  }

  /**
   * {@inheritdoc}
   */
  public function setConfigFactory(ConfigFactoryInterface $config_factory) {
    $this->configFactory = $config_factory;
  }

  /**
   * {@inheritdoc}
   */
  public function exportFormSubmit(array &$form, FormStateInterface $form_state) {

  }

  /**
   * Merges an info file into a package's info file.
   *
   * @param array $package_info
   *   The Yaml encoded package info.
   * @param $info_file_uri
   *   The info file's URI.
   */
  protected function mergeInfoFile($package_info, $info_file_uri) {
    $package_info = Yaml::decode($package_info);
    $existing_info = \Drupal::service('info_parser')->parse($info_file_uri);
    return Yaml::encode($this->configPackagerManager->arrayMergeUnique($package_info, $existing_info));
  }

  /**
   * {@inheritdoc}
   */
  public function prepare($add_profile = FALSE, array &$profile = array(), array &$packages = array()) {
    // If no packages were specified, get all packages.
    if (empty($packages)) {
      $packages = $this->configPackagerManager->getPackages();
    }

    // If any packages exist, read in their files.
    $machine_names = $this->configPackagerManager->listPackageMachineNames(array_keys($packages));
    $existing_packages = $this->configPackagerManager->listPackageDirectories($machine_names, $add_profile);

    // Packages are keyed by short machine names while the existing packages
    // array is keyed by full machine names.
    foreach ($packages as &$package) {
      $this->preparePackage($add_profile, $package, $existing_packages);
    }
    // Clean up the $package pass by reference
    unset($package);

    if ($add_profile) {
      if (empty($profile)) {
        $profile = $this->configPackagerManager->getProfile();
      }
      $this->preparePackage($add_profile, $profile, $existing_packages);
    }
  }

  /**
   * Performs any required changes on a package or profile prior to generation.
   *
   * @param boolean $add_profile
   *   Whether to add an install profile. Defaults to FALSE.
   * @param array $package
   *   The package to be prepared.
   * @param $existing_packages
   *   An array of existing packages with machine names as keys and paths as
   *   values.
   */
  abstract protected function preparePackage($add_profile, &$package, $existing_packages);

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc