diff --git a/Controller/TaskController.php b/Controller/TaskController.php index e93a559..0f559cd 100644 --- a/Controller/TaskController.php +++ b/Controller/TaskController.php @@ -206,9 +206,17 @@ public function getAction($id) */ public function postAction(Request $request) { + $data = array_merge( + [ + 'scheme' => $request->getScheme(), + 'host' => $request->getHost(), + ], + array_filter($request->request->all()) + ); + $manager = $this->getTaskManager(); $task = $this->get('serializer')->deserialize( - json_encode(array_filter($request->request->all())), + json_encode($data), Task::class, 'json', DeserializationContext::create()->setGroups(['api']) @@ -230,8 +238,17 @@ public function postAction(Request $request) */ public function putAction($id, Request $request) { + $data = array_merge( + [ + 'id' => $id, + 'scheme' => $request->getScheme(), + 'host' => $request->getHost(), + ], + array_filter($request->request->all()) + ); + $task = $this->get('serializer')->deserialize( - json_encode(array_merge(['id' => $id], $request->request->all())), + json_encode($data), Task::class, 'json', DeserializationContext::create()->setGroups(['api']) diff --git a/Entity/DoctrineTaskRepository.php b/Entity/DoctrineTaskRepository.php index 59c878f..36e3553 100644 --- a/Entity/DoctrineTaskRepository.php +++ b/Entity/DoctrineTaskRepository.php @@ -56,6 +56,14 @@ public function findById($id) return $this->find($id); } + /** + * {@inheritdoc} + */ + public function findByTaskId($id) + { + return $this->findOneBy(['taskId' => $id]); + } + /** * {@inheritdoc} */ diff --git a/Entity/Task.php b/Entity/Task.php index 8248504..3fd6181 100644 --- a/Entity/Task.php +++ b/Entity/Task.php @@ -56,6 +56,16 @@ class Task implements TaskInterface */ private $taskId; + /** + * @var string + */ + private $host; + + /** + * @var string + */ + private $scheme; + /** * {@inheritdoc} */ @@ -210,6 +220,50 @@ public function setTaskId($taskId) return $this; } + /** + * {@inheritdoc} + */ + public function getHost() + { + return $this->host; + } + + /** + * Set host. + * + * @param string $host + * + * @return $this + */ + public function setHost($host) + { + $this->host = $host; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getScheme() + { + return $this->scheme; + } + + /** + * Set scheme. + * + * @param string $scheme + * + * @return $this + */ + public function setScheme($scheme) + { + $this->scheme = $scheme; + + return $this; + } + /** * {@inheritdoc} */ diff --git a/EventSubscriber/PHPTaskEventSubscriber.php b/EventSubscriber/PHPTaskEventSubscriber.php new file mode 100644 index 0000000..cf77e33 --- /dev/null +++ b/EventSubscriber/PHPTaskEventSubscriber.php @@ -0,0 +1,90 @@ +requestStack = $requestStack; + $this->taskRepository = $taskRepository; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() + { + return [ + Events::TASK_BEFORE => ['pushRequest'], + Events::TASK_AFTER => ['popRequest'], + ]; + } + + /** + * Create and push new request to requests-stack. + * + * @param TaskEvent $event + */ + public function pushRequest(TaskEvent $event) + { + $task = $this->taskRepository->findByTaskId($event->getTask()->getUuid()); + if (!$task) { + // current task is not managed by this bundle + + return; + } + + $request = new Request( + [], + [], + ['_task_id' => $event->getTask()->getUuid()], + [], + [], + ['SERVER_NAME' => $task->getHost(), 'HTTPS' => $task->getScheme() === 'http' ? 'off' : 'on'] + ); + + $this->requestStack->push($request); + } + + /** + * Pop request from request stack. + * + * @param TaskEvent $event + */ + public function popRequest(TaskEvent $event) + { + $request = $this->requestStack->getCurrentRequest(); + if (!$request || $request->attributes->get('_task_id') !== $event->getTask()->getUuid()) { + // current request was not created for current task + + return; + } + + $this->requestStack->pop(); + } +} diff --git a/Handler/BaseDocumentHandler.php b/Handler/BaseDocumentHandler.php index 9b26bdd..b69510b 100644 --- a/Handler/BaseDocumentHandler.php +++ b/Handler/BaseDocumentHandler.php @@ -65,10 +65,9 @@ abstract protected function handleDocument(WorkflowStageBehavior $document, $loc */ public function configureOptionsResolver(OptionsResolver $optionsResolver) { - return $optionsResolver->setRequired(['id', 'locale'])->setAllowedTypes('id', 'string')->setAllowedTypes( - 'locale', - 'string' - ); + return $optionsResolver->setRequired(['id', 'locale']) + ->setAllowedTypes('id', 'string') + ->setAllowedTypes('locale', 'string'); } /** diff --git a/Resources/config/doctrine/Task.orm.xml b/Resources/config/doctrine/Task.orm.xml index d43f264..79273f4 100644 --- a/Resources/config/doctrine/Task.orm.xml +++ b/Resources/config/doctrine/Task.orm.xml @@ -14,6 +14,9 @@ + + +