From 473dafdbcf90020be462eb58c1931f9ed90e6e06 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 5 Nov 2016 21:48:14 +0100 Subject: [PATCH] Implement create and get --- Controller.php | 24 +++++++++++++++++++++++- Models/Task.php | 29 +++++++++++++++++++++++++++-- Models/TaskMapper.php | 3 ++- Theme/backend/task-create.tpl.php | 2 +- 4 files changed, 53 insertions(+), 5 deletions(-) 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(); ?>

getText('Task'); ?>

-
+