digital_signage_framework-2.3.x-dev/digital_signage_framework.install

digital_signage_framework.install
<?php

/**
 * @file
 * The install file for the digital_signage_framework.
 */

use Drupal\Core\Config\FileStorage;
use Drupal\Core\Entity\ContentEntityTypeInterface;
use Drupal\digital_signage_framework\Entity\ContentSetting;
use Drupal\digital_signage_framework\Entity\Device;

/**
 * Implements hook_install().
 */
function digital_signage_framework_setting_install(): void {
  Drupal::service('digital_signage_content_setting.entity_update')->updateExistingEntityTypes();
}

/**
 * Update fields for digital_signage_content_setting entities.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
 */
function digital_signage_framework_update_8001(): void {
  if ($dscs_entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_content_setting', FALSE)) {
    $definition_update_manager = Drupal::entityDefinitionUpdateManager();

    // Remove old fields.
    foreach (['entity_type', 'entity_bundle', 'entity_id'] as $fieldname) {
      if ($definition = $definition_update_manager->getFieldStorageDefinition($fieldname, 'digital_signage_content_setting')) {
        $definition_update_manager->uninstallFieldStorageDefinition($definition);
      }
    }

    // Add new fields.
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = ContentSetting::baseFieldDefinitions($dscs_entity_type);
    foreach (['parent_entity', 'parent_entity_bundle', 'parent_entity_status'] as $fieldname) {
      if (!$definition_update_manager->getFieldStorageDefinition($fieldname, 'digital_signage_content_setting')) {
        $definition_update_manager->installFieldStorageDefinition(
          $fieldname,
          $dscs_entity_type->id(),
          $dscs_entity_type->getProvider(),
          $field_definition[$fieldname]
        );
      }
    }
  }
}

/**
 * Add field for dynamic content to digital_signage_content_setting entities.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
 */
function digital_signage_framework_update_8002(): void {
  if ($dscs_entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_content_setting', FALSE)) {
    $definition_update_manager = Drupal::entityDefinitionUpdateManager();
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = ContentSetting::baseFieldDefinitions($dscs_entity_type);
    $definition_update_manager->installFieldStorageDefinition(
      'dynamic',
      $dscs_entity_type->id(),
      $dscs_entity_type->getProvider(),
      $field_definition['dynamic']
    );
  }
}

/**
 * Add fields for label to digital_signage_content_setting entities.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
 */
function digital_signage_framework_update_8003(): void {
  if ($dscs_entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_content_setting', FALSE)) {
    $definition_update_manager = Drupal::entityDefinitionUpdateManager();
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = ContentSetting::baseFieldDefinitions($dscs_entity_type);
    foreach (['auto_label', 'label'] as $field_name) {
      $definition_update_manager->installFieldStorageDefinition(
        $field_name,
        $dscs_entity_type->id(),
        $dscs_entity_type->getProvider(),
        $field_definition[$field_name]
      );
    }
  }
}

/**
 * Add field for emergency mode to digital_signage_content_setting entities.
 *
 * Add new emergency_entity field to digital_signage_device.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
 */
function digital_signage_framework_update_8004(): void {
  if ($dscs_entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_content_setting', FALSE)) {
    $definition_update_manager = Drupal::entityDefinitionUpdateManager();
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = ContentSetting::baseFieldDefinitions($dscs_entity_type);
    $definition_update_manager->installFieldStorageDefinition(
      'emergencymode',
      $dscs_entity_type->id(),
      $dscs_entity_type->getProvider(),
      $field_definition['emergencymode']
    );
    Drupal::database()->update('digital_signage_content_setting')
      ->fields(['emergencymode' => 0])
      ->execute();
  }

  $config_path = Drupal::service('extension.list.module')->getPath('digital_signage_framework') . '/config/optional';
  $source = new FileStorage($config_path);
  $config_storage = Drupal::service('config.storage');
  $config_storage->write('views.view.emergency_entities', $source->read('views.view.emergency_entities'));

  if ($entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_device', FALSE)) {
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = Device::baseFieldDefinitions($entity_type);
    Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition(
      'emergency_entity',
      $entity_type->id(),
      $entity_type->getProvider(),
      $field_definition['emergency_entity']
    );
  }
}

/**
 * Update settings after refactoring.
 */
function digital_signage_framework_update_8005(): void {
  $config = Drupal::configFactory()->getEditable('digital_signage_framework.settings');
  $config->set('schedule', Drupal::configFactory()->get('digital_signage_schedule.settings')->get());
  $config->save();

  $handler = Drupal::moduleHandler();
  $list = $handler->getModuleList();
  $disable = [
    'digital_signage_content_setting',
    'digital_signage_device',
    'digital_signage_platform',
    'digital_signage_schedule',
  ];
  Drupal::database()->delete('key_value')
    ->condition('collection', 'system.schema')
    ->condition('name', $disable, 'IN')
    ->execute();

  foreach ($disable as $name) {
    unset($list[$name]);
  }
  $handler->setModuleList($list);
  $handler->reload();
}

/**
 * Add field size for digital_signage_device entities.
 *
 * Remove fields width and height from digital_signage_device entities.
 */
function digital_signage_framework_update_8006(): void {
  Drupal::service('module_installer')->install(['dimension']);
  if ($entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_device', FALSE)) {
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = Device::baseFieldDefinitions($entity_type);
    Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition(
      'size',
      $entity_type->id(),
      $entity_type->getProvider(),
      $field_definition['size']
    );
    $definition_update_manager = Drupal::entityDefinitionUpdateManager();
    // Remove old fields.
    foreach (['width', 'height'] as $fieldname) {
      if ($definition = $definition_update_manager->getFieldStorageDefinition($fieldname, 'digital_signage_device')) {
        $definition_update_manager->uninstallFieldStorageDefinition($definition);
      }
    }
  }
}

/**
 * Add field predecessor for digital_signage_content_setting entities.
 */
function digital_signage_framework_update_8007(): void {
  if ($entity_type = Drupal::entityTypeManager()->getDefinition('digital_signage_content_setting', FALSE)) {
    /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definition */
    $field_definition = ContentSetting::baseFieldDefinitions($entity_type);
    Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition(
      'predecessor',
      $entity_type->id(),
      $entity_type->getProvider(),
      $field_definition['predecessor']
    );
  }
}

/**
 * Correct digital_signage_content_setting links from content entities.
 */
function digital_signage_framework_update_8008(): void {
  $definition_update_manager = Drupal::entityDefinitionUpdateManager();
  foreach (Drupal::entityTypeManager()->getDefinitions() as $definition) {
    if ($definition instanceof ContentEntityTypeInterface) {
      if ($definition->id() === 'digital_signage_content_setting') {
        // Nothing to do.
      }
      elseif (!in_array($definition->id(), Drupal::service('digital_signage_content_setting.entity_types')->allDisabledIds(), TRUE)) {
        if ($field_definition = $definition_update_manager->getFieldStorageDefinition('digital_signage', $definition->id())) {
          $definition_update_manager->updateFieldStorageDefinition($field_definition);
        }
        $data_table = $definition->getDataTable();
        $id_field = $definition->getKey('id');
        if (!empty($data_table) && !empty($id_field)) {
          try {
            Drupal::database()
              ->update($data_table)
              ->fields(['digital_signage' => 0])
              ->execute();
          }
          catch (Exception) {
            // Ignore.
          }
        }
      }
    }

  }
  $rows = Drupal::database()->select('digital_signage_content_setting', 's')
    ->fields('s', ['id', 'parent_entity__target_type', 'parent_entity__target_id'])
    ->execute()
    ->fetchAll();
  foreach ($rows as $row) {
    try {
      if ($entity_type = Drupal::entityTypeManager()->getDefinition($row->parent_entity__target_type, FALSE)) {
        $data_table = $entity_type->getDataTable();
        $id_field = $entity_type->getKey('id');
        if (!empty($data_table) && !empty($id_field)) {
          Drupal::database()
            ->update($data_table)
            ->fields(['digital_signage' => $row->id])
            ->condition($id_field, $row->parent_entity__target_id)
            ->execute();
        }
      }
    }
    catch (Exception) {
      // Ignore.
    }
  }
}

/**
 * Add new default value for refresh interval.
 */
function digital_signage_framework_update_8009(): void {
  $config = Drupal::configFactory()->getEditable('digital_signage_framework.settings');
  $config->set('schedule.dynamic_content.refresh', 60);
  $config->set('hotfix_svg', 1);
  $config->save();
}

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

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