where('status', WorkflowStatus::ACTIVE)->execute(); foreach ($workflows as $workflow) { $hooks = $workflow->getHooks(); foreach ($hooks as $hook) { /** @var array{':triggerGroup'?:string} $data */ $triggerIsRegex = \stripos($data['@triggerGroup'], '/') === 0; $matched = false; if ($triggerIsRegex) { $matched = \preg_match($data['@triggerGroup'], $hook) === 1; } else { $matched = $data['@triggerGroup'] === $hook; } if (!$matched && \stripos($hook, '/') === 0) { $matched = \preg_match($hook, $data['@triggerGroup']) === 1; } if ($matched) { $this->runWorkflow($workflow, $hook, $data); } } } } /** * Api method to make a call to the cli app * * @param WorkflowTemplate $workflow Workflow template * @param string $hook Event hook * @param array $data Event data * * @return void * * @api * * @since 1.0.0 */ public function runWorkflow(WorkflowTemplate $workflow, string $hook, array $data) : void { include $workflow->source->getAbsolutePath(); } /** * Method which creates a workflow instance * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface Response can be rendered * * @since 1.0.0 * @codeCoverageIgnore */ public function cliWorkflowInstanceCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); if (!empty($val = $this->validateInstanceCreate($request))) { $response->set('instance_create', new FormValidation($val)); $response->header->status = RequestStatusCode::R_400; } $instance = $this->createInstanceFromRequest($request); $view->setTemplate('/Modules/Workflow/Theme/Cli/empty-command'); return $view; } /** * Validate template create request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateInstanceCreate(RequestAbstract $request) : array { $val = []; if (($val['j'] = empty($request->getData('j')))) { return $val; } return []; } /** * Method to create instance from request. * * @param RequestAbstract $request Request * * @return WorkflowInstanceAbstract * * @since 1.0.0 */ private function createInstanceFromRequest(RequestAbstract $request) : WorkflowInstanceAbstract { /** @var \Modules\Workflow\Models\WorkflowTemplate $template */ $template = WorkflowTemplateMapper::get() ->where('id', (int) $request->getData('j')) ->execute(); $controller = null; $files = $template->source->getSources(); foreach ($files as $tMedia) { $lowerPath = \strtolower($tMedia->getPath()); switch (true) { case StringUtils::endsWith($lowerPath, 'WorkflowController.php'): require_once $lowerPath; $controller = new WorkflowController($this->app, $template); break; } } /** @var \Modules\Workflow\Models\WorkflowControllerInterface $controller */ $instance = $controller->createInstanceFromRequest($request, $template); $controller->createInstanceDbModel($instance); return $instance; } }