wayfinding-2.1.x-dev/modules/digital_signage/wayfinding_digital_signage.module
modules/digital_signage/wayfinding_digital_signage.module
<?php
/**
* @file
* Module file for the wayfinding for digital signage module.
*/
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\digital_signage_framework\DeviceInterface;
use Drupal\digital_signage_framework\Entity\Device;
/**
* Implements hook_entity_base_field_info().
*/
function wayfinding_digital_signage_entity_base_field_info(EntityTypeInterface $entity_type): array {
if ($entity_type->id() === 'digital_signage_device') {
/** @var \Drupal\wayfinding_digital_signage\EntityUpdate $service */
$service = Drupal::service('wayfinding_digital_signage.entity_update');
return $service->fieldDefinition();
}
return [];
}
/**
* Prepares variables for views wayfinding master templates.
*
* Default template: views-view-wayfinding-wrapper.html.twig.
*
* @param array $variables
* The variables for the twig template.
*/
function wayfinding_digital_signage_preprocess_views_view_wayfinding_wrapper(array &$variables): void {
/** @var \Drupal\views\ViewExecutable $view */
$view = $variables['view'];
if (!empty($view->args[1])) {
$service = Drupal::service('wayfinding.query');
$perspective = $view->args[0] ?? 0;
/** @var \Drupal\digital_signage_framework\DeviceInterface $device */
$device = $view->args[1] instanceof DeviceInterface ?
$view->args[1] :
Device::load($view->args[1]);
$bgimg = $service->getRenderedMedia($perspective, 'user', 1, TRUE);
if (!($device->get('pin_location_x')->value === NULL || $device->get('pin_location_y')->value === NULL)) {
$pinLocation = [
'x' => $device->get('pin_location_x')->value ?? 0,
'y' => $device->get('pin_location_y')->value ?? 0,
];
$pinContent = '<g transform="translate(' . $pinLocation['x'] . ',' . $pinLocation['y'] . ')">' .
$service->getRenderedPin(TRUE) . '</g>';
$bgimg = str_replace('</svg>', $pinContent . '</svg>', $bgimg);
}
else {
$variables['pinimg'] = $service->getRenderedPin();
}
$variables['bgimg'] = $bgimg;
}
}
/**
* Implements hook_entity_insert().
*/
function wayfinding_digital_signage_entity_insert(EntityInterface $entity): void {
Drupal::service('wayfinding_digital_signage.events')->insert($entity);
}
/**
* Implements hook_entity_update().
*/
function wayfinding_digital_signage_entity_update(EntityInterface $entity): void {
Drupal::service('wayfinding_digital_signage.events')->update($entity);
}
/**
* Implements hook_entity_delete().
*/
function wayfinding_digital_signage_entity_delete(EntityInterface $entity): void {
Drupal::service('wayfinding_digital_signage.events')->delete($entity);
}
/**
* Implements hook_inline_entity_form_entity_form_alter().
*/
function wayfinding_digital_signage_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface $form_state): void {
if (($entity_form['#entity_type'] === 'digital_signage_content_setting') && method_exists($form_state->getBuildInfo()['callback_object'], 'getEntity')) {
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
$entity = $form_state->getBuildInfo()['callback_object']->getEntity();
if ($entity->getEntityTypeId() === 'digsig_computed_content' && $entity->bundle() === 'wayfinding') {
$entity_form['devices']['#access'] = FALSE;
}
}
}
