76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace Drupal\farm_map\EventSubscriber;
|
|
|
|
use Drupal\Core\Config\ConfigFactoryInterface;
|
|
use Drupal\farm_map\Event\MapRenderEvent;
|
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
|
|
|
/**
|
|
* An event subscriber for the MapRenderEvent.
|
|
*
|
|
* Adds default behaviors to maps.
|
|
*/
|
|
class MapRenderEventSubscriber implements EventSubscriberInterface {
|
|
|
|
/**
|
|
* The config factory service.
|
|
*
|
|
* @var \Drupal\Core\Config\ConfigFactoryInterface
|
|
*/
|
|
private $configFactory;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
|
|
* The config factory service.
|
|
*/
|
|
public function __construct(ConfigFactoryInterface $config_factory) {
|
|
$this->configFactory = $config_factory;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function getSubscribedEvents() {
|
|
return [
|
|
MapRenderEvent::EVENT_NAME => 'onMapRender',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* React to the MapRenderEvent.
|
|
*
|
|
* @param \Drupal\farm_map\Event\MapRenderEvent $event
|
|
* The MapRenderEvent.
|
|
*/
|
|
public function onMapRender(MapRenderEvent $event) {
|
|
|
|
// Add the map type cache tags.
|
|
$event->addCacheTags($event->getMapType()->getCacheTags());
|
|
|
|
// Include map behaviors defined by the map type.
|
|
$map_behaviors = $event->getMapType()->getMapBehaviors();
|
|
foreach ($map_behaviors as $behavior) {
|
|
$event->addBehavior($behavior);
|
|
}
|
|
|
|
// Add the WKT behavior if the render element has WKT.
|
|
if (!empty($event->element['#map_settings']['wkt'])) {
|
|
$event->addBehavior('wkt');
|
|
}
|
|
|
|
// Get whether the side panel should be enabled.
|
|
$enable_side_panel = $this->configFactory->get('farm_map.settings')->get('enable_side_panel');
|
|
|
|
// Set a cache tag on the map settings to invalidate the cache on changes.
|
|
$event->addCacheTags(['config:farm_map.settings']);
|
|
|
|
if ($enable_side_panel) {
|
|
$event->addBehavior('enable_side_panel');
|
|
}
|
|
}
|
|
|
|
}
|