public function updateEventsAfterPublish()
{
if (!$this->eventEmittingService->isEnabled()) {
return;
}
/** @var $entityManager EntityManager */
$entityManager = $this->entityManager;
foreach ($this->scheduledNodeEventUpdates as $documentPublish) {
/* @var $nodeEvent NodeEvent */
$nodeEvent = $this->eventEmittingService->emit(self::DOCUMENT_PUBLISHED, array(), NodeEvent::class);
$nodeEvent->setNode($documentPublish['documentNode']);
$nodeEvent->setWorkspaceName($documentPublish['targetWorkspace']);
$this->persistenceManager->whitelistObject($nodeEvent);
$this->persistenceManager->persistAll(true);
$parentEventIdentifier = $this->persistenceManager->getIdentifierByObject($nodeEvent);
$qb = $entityManager->createQueryBuilder();
$qb->update(NodeEvent::class, 'e')->set('e.parentEvent', ':parentEventIdentifier')->setParameter('parentEventIdentifier', $parentEventIdentifier)->where('e.parentEvent IS NULL')->andWhere('e.workspaceName = :workspaceName')->setParameter('workspaceName', $documentPublish['workspaceName'])->andWhere('e.documentNodeIdentifier = :documentNodeIdentifier')->setParameter('documentNodeIdentifier', $documentPublish['documentNode']->getIdentifier())->andWhere('e.eventType != :publishedEventType')->setParameter('publishedEventType', self::DOCUMENT_PUBLISHED)->getQuery()->execute();
}
$this->scheduledNodeEventUpdates = array();
}