intelligencebank-8.x-2.x-dev/modules/ib_dam_wysiwyg/ib_dam_wysiwyg.install

modules/ib_dam_wysiwyg/ib_dam_wysiwyg.install
<?php

/**
 * @file
 * Contains install/uninstall hooks.
 */

use Drupal\Component\Serialization\Json;
use Drupal\Core\Entity\EntityStorageException;
use Drupal\filter\Entity\FilterFormat;
use Drupal\ib_dam\Asset\Asset;
use Drupal\ib_dam\IbDamResourceModel;
use Drupal\ib_dam_media\AssetStorage\MediaStorage;

/**
 * Implements hook_requirements().
 */
function ib_dam_wysiwyg_requirements(string $phase): array {
  $requirements = [];
  if ($phase === 'runtime') {
    $requirements['deprecation'] = [
      'title'       => t('IB DAM CKEditor WYSIWYG integration'),
      'description' => t('This module is deprecated in 4.x and will be removed in 5.x'),
      'severity'    => REQUIREMENT_WARNING,
    ];
  }
  return $requirements;
}

/**
 * Disable text format and convert inline media
 * from custom JSON markup into <drupal-media>.
 */
function ib_dam_wysiwyg_update_9000() {
  /** @var \Drupal\ib_dam_media\MediaTypeMatcher $media_type_matcher */
  $media_type_matcher = \Drupal::service('ib_dam_media.media_type_matcher');
  /** @var \Drupal\filter\Entity\FilterFormat[] $filter_formats */
  $filter_formats = FilterFormat::loadMultiple();
  foreach ($filter_formats as $format) {
    foreach ($format->filters()->getAll() as $item) {
      if ($item->getPluginId() === 'ib_dam_wysiwyg') {
        $format->removeFilter($item->getPluginId());
        try {
          $format->save();

          // Get a list of storage fields
          $field_config_ids = \Drupal::entityQuery('field_storage_config')
            ->accessCheck(FALSE)
            ->condition('type', ['text', 'text_long', 'text_with_summary'], 'IN')
            ->condition('status', 1)
            ->execute();

          // Load all the fields.
          $field_config_entities = \Drupal::entityTypeManager()
            ->getStorage('field_storage_config')
            ->loadMultiple($field_config_ids);

          /** @var \Drupal\field\FieldStorageConfigInterface $config_entity */
          foreach ($field_config_entities as $config_entity) {
            $entity_type = $config_entity->getTargetEntityTypeId();
            $field_name  = $config_entity->getName();
            // Find entities with this field and affected format in use.
            $entity_ids = \Drupal::entityQuery($entity_type)
              ->accessCheck(FALSE)
              ->condition($field_name . '.format', $format->id())
              ->execute();

            if (empty($entity_ids)) {
              continue;
            }
            $entities = \Drupal::entityTypeManager()
              ->getStorage($entity_type)
              ->loadMultiple($entity_ids);

            /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
            foreach ($entities as $entity) {
              /** @var \Drupal\text\Plugin\Field\FieldType\TextItemBase $field */
              $field = $entity->get($field_name);
              if ($field->isEmpty()) {
                continue;
              }

              $field_values = $field->getValue();
              foreach ($field_values as $delta => $value) {
                // Find all the JSON-formatted medias.
                preg_match_all(
                  '/{"source_type"...+}/m',
                  $value['value'],
                  $matches
                );
                $matches = reset($matches);
                if (empty($matches)) {
                  continue;
                }

                foreach ($matches as $match) {
                  // Parse JSON into array.
                  $media_data = Json::decode($match);

                  // Create asset object.
                  $asset = Asset::createFromValues($media_data);
                  $media_asset_type = $asset->getSourceType() === 'embed'
                    ? $asset->getSourceType()
                    : $asset->getType();

                  // Required to have source for embed assets.
                  $asset->setSource(new IbDamResourceModel($media_data));

                  $media_type_id = $media_type_matcher->matchType($media_asset_type);
                  $storage_type_id = implode(':', [
                    MediaStorage::class,
                    $asset->getSourceType(),
                    $media_type_id,
                  ]);
                  $asset->setStorageType($storage_type_id);

                  // Create media entity.
                  $media = $asset->save();
                  $media->save();

                  // Generate "<drupal-media>" tag.
                  $tag = '<drupal-media data-entity-type="media" data-entity-uuid="' . $media->uuid() . '"></drupal-media>';

                  // Replace JSON with newly created "drupal-media" tag.
                  $field_values[$delta]['value'] = str_replace($match, $tag, $field_values[$delta]['value']);
                }
                unset($matches);
              }
              // Update entity field.
              $entity->set($field_name, $field_values)->save();
            }
          }
        }
        catch (EntityStorageException $e) {
          \Drupal::logger('ib_dam_wysiwyg')
            ->error($e->getMessage());
        }
      }
    }
  }
}

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

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