auto_entitylabel-8.x-3.x-dev/auto_entitylabel.install

auto_entitylabel.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the Automatic Entity Labels.
 */

use Drupal\auto_entitylabel\AutoEntityLabelManager;

/**
 * Implements hook_install().
 */
function auto_entitylabel_install() {
  module_set_weight('auto_entitylabel', -100);
}

/**
 * Implements hook_update_N().
 */
function auto_entitylabel_update_8001() {
  $config = \Drupal::configFactory()->getEditable('auto_entitylabel.settings');
  foreach (['submit', 'form_build_id', 'form_token', 'form_id', 'op'] as $key) {
    if ($config->get($key)) {
      $config->clear($key);
    }
  }
  $config->save();
}

/**
 * Split a single configuration into separate configs.
 */
function auto_entitylabel_update_8201() {
  /** @var \Drupal\Core\Entity\EntityTypeManager $entity_type_manager */
  $entity_type_manager = \Drupal::entityTypeManager();

  /** @var \Drupal\Core\Config\Config $old_config */
  $old_config = \Drupal::configFactory()
    ->getEditable('auto_entitylabel.settings');
  $raw = $old_config->getRawData();

  $entity_types = [];
  /** @var \Drupal\Core\Config\Entity\ConfigEntityType $entity_type */
  foreach ($entity_type_manager->getDefinitions() as $entity_type_id => $entity_type) {
    if ($entity_type->getLinkTemplate('auto-label')) {
      $entity_types[] = $entity_type_id;
    }
  }

  $setting_keys = ['status', 'pattern', 'php', 'escape'];

  $new_configs = [];
  foreach ($raw as $key => $value) {
    foreach ($entity_types as $type_id) {
      if (strpos($key, $type_id) === 0) {

        $key = substr($key, strlen($type_id) + 1);

        foreach ($setting_keys as $setting) {
          if (strpos($key, $setting) == strlen($key) - strlen($setting)) {
            $bundle = substr($key, 0, strlen($key) - strlen($setting) - 1);
            $new_configs[$type_id][$bundle][$setting] = $value;
          }
        }

        continue;
      }
    }
  }

  /** @var \Drupal\Core\Config\ConfigFactory $config_interface */
  $config_interface = \Drupal::service('config.factory');

  foreach ($new_configs as $type => $type_configs) {
    /** @var \Drupal\Core\Config\Entity\ConfigEntityTypeInterface $entityType */
    $entityType = $entity_type_manager->getStorage($type)->getEntityType();
    $prefix = $entityType->getConfigPrefix();
    $type = $entity_type_manager->getStorage($type)->getEntityType()->getProvider();

    foreach ($type_configs as $bundle => $settings) {
      $config_name = "auto_entitylabel.settings.$type.$bundle";
      $config = $config_interface->getEditable($config_name);

      $config->setData($settings);
      $config->set('dependencies', ['config' => ["$prefix.$bundle"]]);

      $config->save();
    }
  }
  $old_config->delete();
}

/**
 * Sets the new "New content behavior" config option.
 *
 * All existing configurations using "Create label after first save" as the
 * initial value, which preserves the old logic, that content is saved twice,
 * (which may interfere with other modules, but all tokens are supported).
 * NOTE, if you desire to switch to the new logic, which creates the label
 * before saving the content (doesn't interfere with other modules, but not
 * all tokens are supported), set the "New content behavior" to
 * "Create label before first save" in your "automatic label" settings.
 */
function auto_entitylabel_update_8202() {
  /** @var \Drupal\Core\Entity\EntityTypeManager $entity_type_manager */
  $entity_type_manager = \Drupal::entityTypeManager();

  $entity_types = [];
  /** @var \Drupal\Core\Config\Entity\ConfigEntityType $entity_type */
  foreach ($entity_type_manager->getDefinitions() as $entity_type_id => $entity_type) {
    if ($entity_type->getLinkTemplate('auto-label')) {
      $entity_types[] = $entity_type_id;
    }
  }

  $bundleService = \Drupal::service('entity_type.bundle.info');

  /** @var \Drupal\Core\Config\ConfigFactory $config_interface */
  $config_interface = \Drupal::service('config.factory');
  $existingConfigs = $config_interface->listAll('auto_entitylabel.settings');

  foreach ($entity_types as $type_id) {
    $type = $entity_type_manager->getStorage($type_id)->getEntityType()->getProvider();

    // Special handling for paragraphs because the module had to
    // be different.
    if ($type == 'paragraphs') {
      $type = 'paragraph';
    }

    $bundles = array_keys($bundleService->getBundleInfo($type));

    foreach ($bundles as $bundle) {
      $config_name = "auto_entitylabel.settings.$type.$bundle";

      if (in_array($config_name, $existingConfigs)) {
        $config = $config_interface->getEditable($config_name);
        // There are two values for the new entity action: 0 means
        // set the label before first save, 1 means after first
        // save. Preserve the previous behavior and default to
        // after first save.
        $config->set('new_content_behavior', AutoEntityLabelManager::AFTER_SAVE);
        $config->save();
      }
    }
  }
}

/**
 * Lower module weight so to run before other modules.
 */
function auto_entitylabel_update_8301(&$sandbox) {
  module_set_weight('auto_entitylabel', -100);
}

/**
 * Implements hook_uninstall().
 */
function auto_entitylabel_uninstall() {
  \Drupal::configFactory()->getEditable('auto_entitylabel.settings')->delete();
}

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

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