crm_core-8.x-3.x-dev/modules/crm_core_user_sync/src/EventSubscriber/RequestSubscriber.php
modules/crm_core_user_sync/src/EventSubscriber/RequestSubscriber.php
<?php
namespace Drupal\crm_core_user_sync\EventSubscriber;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\crm_core_user_sync\CrmCoreUserSyncRelationInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* CRM Core User Synchronization event subscriber.
*/
class RequestSubscriber implements EventSubscriberInterface {
/**
* Current logged in user.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected $currentUser;
/**
* The configuration factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* Relation service.
*
* @var \Drupal\crm_core_user_sync\CrmCoreUserSyncRelationInterface
*/
protected $relationService;
/**
* Entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Constructs event subscriber.
*
* @param \Drupal\Core\Session\AccountProxyInterface $current_user
* Current logged in user.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The configuration factory.
* @param \Drupal\crm_core_user_sync\CrmCoreUserSyncRelationInterface $relation_service
* The relation service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
* Entity type manager.
*/
public function __construct(AccountProxyInterface $current_user, ConfigFactoryInterface $config_factory, CrmCoreUserSyncRelationInterface $relation_service, EntityTypeManagerInterface $entityTypeManager) {
$this->currentUser = $current_user;
$this->configFactory = $config_factory;
$this->relationService = $relation_service;
$this->entityTypeManager = $entityTypeManager;
}
/**
* Kernel request event handler.
*
* @param \Symfony\Component\HttpKernel\Event\RequestEvent $event
* Response event.
*/
public function onKernelRequest(RequestEvent $event) {
if ($this->currentUser->isAuthenticated()) {
$config = $this->configFactory->get('crm_core_user_sync.settings');
if ($config->get('contact_load')) {
$individual_id = $this->relationService->getIndividualIdFromUserId($this->currentUser->id());
if ($individual_id) {
$individual = $this->entityTypeManager->getStorage('crm_core_individual')->load($individual_id);
$account = $this->currentUser->getAccount();
$account->crm_core['contact'] = $individual;
$this->currentUser->setAccount($account);
}
}
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array {
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
}
