diff --git a/Controller.php b/Controller.php
index 0cd81b9..7c077b7 100644
--- a/Controller.php
+++ b/Controller.php
@@ -15,6 +15,7 @@
*/
namespace Modules\Tasks;
+use Model\Message\FormValidation;
use Model\Message\Redirect;
use Model\Message\Reload;
use Modules\Tasks\Models\Task;
@@ -167,6 +168,21 @@ class Controller extends ModuleAbstract implements WebInterface
return $view;
}
+ private function validateTaskCreate(RequestAbstract $request) : array
+ {
+ $val = [];
+ if (
+ ($val['title'] = empty($request->getData('title')))
+ || ($val['description'] = empty($request->getData('description')))
+ || ($val['due'] = !((bool)strtotime($request->getData('due'))))
+ || ($val['forward'] = !(is_numeric($request->getData('forward') ?? 0)))
+ ) {
+ return $val;
+ }
+
+ return [];
+ }
+
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
@@ -179,6 +195,12 @@ class Controller extends ModuleAbstract implements WebInterface
*/
public function apiTaskCreate(RequestAbstract $request, ResponseAbstract $response, $data = null)
{
+ if (!empty($val = $this->validateTaskCreate($request))) {
+ $response->set('task_create', new FormValidation($val));
+
+ return;
+ }
+
$task = new Task();
$task->setTitle($request->getData('title') ?? '');
$task->setDescription($request->getData('description') ?? '');
@@ -198,7 +220,7 @@ class Controller extends ModuleAbstract implements WebInterface
$task->addElement($element);
TaskMapper::create($task);
- $response->set($request->__toString(), new Redirect(UriFactory::build('{/base}/{/lang}/{/app}/task/single?id=' . $task->getId())));
+ $response->set($request->__toString(), $task->jsonSerialize());
}
/**
diff --git a/Models/Task.php b/Models/Task.php
index b50e2f2..25930a7 100644
--- a/Models/Task.php
+++ b/Models/Task.php
@@ -28,7 +28,7 @@ use phpOMS\Datatypes\Exception\InvalidEnumValue;
* @link http://orange-management.com
* @since 1.0.0
*/
-class Task
+class Task implements \JsonSerializable
{
/**
@@ -119,7 +119,7 @@ class Task
*/
protected $schedule = null;
- protected $media = null;
+ protected $media = [];
/**
* Constructor.
@@ -197,6 +197,7 @@ class Task
public function setCreatedBy(int $id)
{
$this->createdBy = $id;
+ $this->schedule->setCreatedBy($id);
}
/**
@@ -415,4 +416,28 @@ class Task
return $this->schedule;
}
+ private function toArray() : array
+ {
+ return [
+ 'id' => $this->id,
+ 'title' => $this->title,
+ 'description' => $this->description,
+ 'status' => $this->status,
+ 'type' => $this->type,
+ 'due' => $this->due->format('Y-m-d H:i:s'),
+ 'done' => (!isset($this->done) ? null : $this->done->format('Y-m-d H:i:s')),
+ ];
+ }
+
+ /**
+ * Specify data which should be serialized to JSON
+ * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
+ * @return mixed data which can be serialized by json_encode,
+ * which is a value of any type other than a resource.
+ * @since 5.4.0
+ */
+ public function jsonSerialize()
+ {
+ return json_encode($this->toArray());
+ }
}
diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php
index 3c0da81..5528aac 100644
--- a/Models/TaskMapper.php
+++ b/Models/TaskMapper.php
@@ -16,6 +16,7 @@
namespace Modules\Tasks\Models;
use Modules\Calendar\Models\ScheduleMapper;
+use Modules\Media\Models\MediaMapper;
use Modules\Tasks\Models\TaskElementMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\DataStorage\Database\Query\Builder;
@@ -68,7 +69,7 @@ class TaskMapper extends DataMapperAbstract
'dst' => 'task_element_task',
'src' => null,
],
- 'media' => [
+ 'media' => [ // todo: maybe make this a has one and then link to collection instead of single media files!
'mapper' => MediaMapper::class,
'table' => 'task_media',
'dst' => 'task_media_dst',
diff --git a/Theme/backend/task-create.tpl.php b/Theme/backend/task-create.tpl.php
index 929c2d2..28ccd86 100644
--- a/Theme/backend/task-create.tpl.php
+++ b/Theme/backend/task-create.tpl.php
@@ -22,7 +22,7 @@ echo $this->getData('nav')->render(); ?>
= $this->getText('Task'); ?>