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 @@
+
+
+