lb_grid_cta-1.0.1/modules/lb_grid_icon/lb_grid_icon.install

modules/lb_grid_icon/lb_grid_icon.install
<?php

/**
 * @file
 * Install, update and uninstall functions for the Y Layout Builder - Grid Icon module.
 */

use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Update configs image style
 */
function lb_grid_icon_update_9001(&$sandbox) {
  $path = \Drupal::service('extension.list.module')->getPath('lb_grid_icon') . '/config/optional';
  /** @var \Drupal\config_import\ConfigImporterService $config_importer */
  $config_importer = \Drupal::service('config_import.importer');
  $config_importer->setDirectory($path);
  $config_importer->importConfigs([
    'image.style.icon_image',
    'core.entity_view_display.paragraph.icon_grid_item.default',
  ]);
}


/**
 * Import config to create 'icon_grid_item' sub block for 'lb_icon_grid' block.
 */
function lb_grid_icon_update_9002() {
  $path = \Drupal::service('extension.list.module')->getPath('lb_grid_icon') . '/config/optional';
  /** @var \Drupal\config_import\ConfigImporterService $config_importer */
  $config_importer = \Drupal::service('config_import.importer');
  $config_importer->setDirectory($path);
  $config_importer->importConfigs([
    'block_content.type.icon_grid_item',
    'core.entity_form_display.block_content.icon_grid_item.default',
    'core.entity_view_display.block_content.icon_grid_item.default',
    'field.storage.block_content.field_block_item',
    'field.storage.block_content.field_description',
    'field.storage.block_content.field_media',
    'field.storage.block_content.field_title',
    'field.field.block_content.icon_grid_item.field_description',
    'field.field.block_content.icon_grid_item.field_media',
    'field.field.block_content.icon_grid_item.field_title',
    'field.field.block_content.lb_icon_grid.field_block_item',
    'language.content_settings.block_content.icon_grid_item',
    'block_content.type.lb_icon_grid',
  ]);
}

/**
 * Migrate content from 'icon_grid_item' paragraph to 'icon_grid_item' block.
 */
function lb_grid_icon_update_9003(&$sandbox) {
  // The number 9002 was used in the previous version, 1.1.4 for another update,
  // that is in conflict with 9002 for the current version. We have to call it directly.
  // see https://git.drupalcode.org/project/lb_grid_cta/-/blame/1.1.x/modules/lb_grid_icon/lb_grid_icon.install?ref_type=heads#L25
  lb_grid_icon_update_9002();
  /** @var \Drupal\Core\Entity\EntityTypeManager $entityTypeManager */
  $entityTypeManager = \Drupal::entityTypeManager();
  $storageParagraph = $entityTypeManager->getStorage('paragraph');
  $storageBlock = $entityTypeManager->getStorage('block_content');
  if (!isset($sandbox['progress'])) {
    $sandbox['progress'] = 0;
    $sandbox['data'] = [
      'paragraphs' => $storageParagraph->loadByProperties(['type' => 'icon_grid_item']),
      'blocks' => []
    ];
    // Group paragraphs by parent id.
    foreach ($sandbox['data']['paragraphs'] as $id => $paragraph) {
      $sandbox['data']['blocks'][$paragraph->get('parent_id')->value][] = $id;
    }
    $sandbox['total'] = count($sandbox['data']['blocks']);
  }

  $blocks = array_slice($sandbox['data']['blocks'], $sandbox['progress'], 5, true);

  foreach ($blocks as $parentId => $paragraphIds) {
    $newBlockIds = [];

    foreach ($paragraphIds as $paragraphId) {
      $paragraph = $sandbox['data']['paragraphs'][$paragraphId];
      // Create new 'icon_grid_item' sub block with content from paragraph
      $block = $storageBlock->create([
        'type' => 'icon_grid_item',
        'field_description' => $paragraph->get('field_grid_item_description')->getValue(),
        'field_title' => $paragraph->get('field_grid_item_title')->getValue(),
        'field_media' => $paragraph->get('field_grid_item_icon')->getValue(),
      ]);

      $block->save();
      $newBlockIds[] = $block->id();
      $paragraph->delete();
    }

    // Load parent block and set new sub block.
    /** @var \Drupal\block_content\Entity\BlockContent $parentBlock */
    if (($parentBlock = $storageBlock->load($parentId)) && $parentBlock->bundle() === 'lb_icon_grid') {
      $parentBlock->set('field_block_item', $newBlockIds)->save();
    }
    $sandbox['progress']++;
  }

  $sandbox['#finished'] = empty($sandbox['total']) ? 1 : $sandbox['progress'] / $sandbox['total'];
}

/**
 * Remove 'icon_grid_item' paragraph config
 */
function lb_grid_icon_update_9004() {
  $path = \Drupal::service('extension.list.module')->getPath('lb_grid_icon') . '/config/optional';
  /** @var \Drupal\config_import\ConfigImporterService $config_importer */
  $config_importer = \Drupal::service('config_import.importer');

  $config_importer->setDirectory($path);
  $config_importer->importConfigs([
    'core.entity_form_display.block_content.lb_icon_grid.default',
    'core.entity_view_display.block_content.lb_icon_grid.default',
  ]);

  $configsToDelete = [
    'paragraphs.paragraphs_type.icon_grid_item',
    'core.entity_form_display.paragraph.icon_grid_item.default',
    'core.entity_view_display.paragraph.icon_grid_item.default',
  ];

  $configFactory = \Drupal::configFactory();
  foreach ($configsToDelete as $config) {
    $configFactory->getEditable($config)->delete();
  }

  FieldConfig::loadByName('paragraph', 'icon_grid_item', 'field_grid_item_title')?->delete();
  FieldConfig::loadByName('paragraph', 'icon_grid_item', 'field_grid_item_icon')?->delete();
  FieldConfig::loadByName('paragraph', 'icon_grid_item', 'field_grid_item_description')?->delete();
  FieldConfig::loadByName('block_content', 'lb_icon_grid', 'field_grid_items')?->delete();

  $fields = [
    'paragraph' => [
      'field_grid_item_title',
      'field_grid_item_icon',
      'field_grid_item_description',
    ],
    'block_content' => [
      'field_grid_items'
    ]
  ];

  // Check if the field storage is used in other entities
  foreach ($fields as $entityTypeId => $fieldNames) {
    foreach ($fieldNames as $fieldName) {
      $fieldStorage = FieldStorageConfig::loadByName($entityTypeId, $fieldName);
      if ($fieldStorage && empty($fieldStorage->getBundles())) {
        $fieldStorage->delete();
      }
    }
  }
}

/**
 * Rename label "field_block_item" field
 */
function lb_grid_icon_update_9005() {
  $path = \Drupal::service('extension.list.module')->getPath('lb_grid_icon') . '/config/optional';
  /** @var \Drupal\config_import\ConfigImporterService $config_importer */
  $config_importer = \Drupal::service('config_import.importer');
  $config_importer->setDirectory($path);
  $config_importer->importConfigs([
    'field.field.block_content.lb_icon_grid.field_block_item',
  ]);
}


/**
 * Update an image style for the icon field.
 */
function lb_grid_icon_update_9006() {
  $path = \Drupal::service('extension.list.module')->getPath('lb_grid_icon') . '/config/optional';
  /** @var \Drupal\config_import\ConfigImporterService $config_importer */
  $config_importer = \Drupal::service('config_import.importer');
  $config_importer->setDirectory($path);
  $config_importer->importConfigs([
    'image.style.icon_image',
  ]);
}

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

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