entityManager = $entityManager; $this->workflowManager = $workflowManager; $this->config = $config; } /** * @param string[]|string $signal A signal. * @param array $options Save options. * @param ?array $params Signal params. */ public function trigger($signal, ?Entity $entity = null, array $options = [], ?array $params = null): void { if (is_array($signal)) { $signal = implode('.', $signal); } if ($this->config->get('signalsDisabled')) { return; } if ($entity) { $this->workflowManager->processSignal($entity, $signal, $params, $options); return; } if ($this->config->get('signalsRegularDisabled')) { return; } $listenerList = $this->entityManager ->getRDBRepository(BpmnSignalListener::ENTITY_TYPE) ->select(['id']) ->order('number') ->where([ 'name' => $signal, 'isTriggered' => false, ]) ->find(); foreach ($listenerList as $item) { $item->set('isTriggered', true); $item->set('triggeredAt', date(DateTime::SYSTEM_DATE_TIME_FORMAT)); $this->entityManager->saveEntity($item); } } public function subscribe(string $signal, string $flowNodeId): ?string { if ($this->config->get('signalsDisabled')) { return null; } if ($this->config->get('signalsRegularDisabled')) { return null; } $item = $this->entityManager->createEntity(BpmnSignalListener::ENTITY_TYPE, [ 'name' => $signal, 'flowNodeId' => $flowNodeId, ]); return $item->getId(); } public function unsubscribe(string $id): void { $this->entityManager ->getRDBRepositoryByClass(BpmnSignalListener::class) ->deleteFromDb($id); } }