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();
}
