From da0d19c63829b73a29787a553c7938b81122bbd6 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Apr 2024 21:40:47 +0000 Subject: [PATCH] template fixes + bug fixes + style fixes --- Controller/ApiController.php | 105 ++++++++++++++++ Controller/BackendController.php | 2 +- Models/Event.php | 8 ++ Models/NullEvent.php | 47 +++++++ Theme/Backend/eventmanagement-create.tpl.php | 49 -------- Theme/Backend/eventmanagement-view.tpl.php | 126 +++++++++++++------ tests/Models/EventMapperTest.php | 2 +- 7 files changed, 250 insertions(+), 89 deletions(-) create mode 100644 Models/NullEvent.php delete mode 100755 Theme/Backend/eventmanagement-create.tpl.php diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 3920459..f6be215 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -14,6 +14,16 @@ declare(strict_types=1); namespace Modules\EventManagement\Controller; +use Modules\Admin\Models\NullAccount; +use Modules\EventManagement\Models\Event; +use Modules\EventManagement\Models\EventMapper; +use Modules\EventManagement\Models\ProgressType; +use Modules\Media\Models\NullMedia; +use phpOMS\Message\Http\RequestStatusCode; +use phpOMS\Message\RequestAbstract; +use phpOMS\Message\ResponseAbstract; +use phpOMS\Utils\Parser\Markdown\Markdown; + /** * EventManagement api controller class. * @@ -24,4 +34,99 @@ namespace Modules\EventManagement\Controller; */ final class ApiController extends Controller { + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiEventCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateEventCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $event = $this->createEventFromRequest($request); + $this->createModel($request->header->account, $event, EventMapper::class, 'card', $request->getOrigin()); + + $this->createStandardCreateResponse($request, $response, $event); + } + + /** + * Method to create card from request. + * + * @param RequestAbstract $request Request + * + * @return Event + * + * @since 1.0.0 + */ + public function createEventFromRequest(RequestAbstract $request) : Event + { + $event = new Event(); + $event->name = $request->getDataString('name') ?? ''; + $event->descriptionRaw = $request->getDataString('plain') ?? ''; + $event->description = Markdown::parse($request->getDataString('plain') ?? ''); + $event->start = $request->getDataDateTime('start') ?? $event->start; + $event->end = $request->getDataDateTime('end') ?? $event->end; + $event->createdBy = new NullAccount($request->header->account); + $event->progressType = ProgressType::tryFromValue($request->getDataInt('progresstype')) ?? ProgressType::MANUAL; + $event->progress = $request->getDataInt('progress') ?? 0; + $event->budgetCosts->value = $request->getDataInt('budgetcosts') ?? 0; + $event->actualCosts->value = $request->getDataInt('actualcosts') ?? 0; + + // @todo implement unit + //$event->unit = $this->app->unitId; + + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media', 'Api')->uploadFiles( + [], + [], + $uploadedFiles, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files/Modules/EventManagement', + '/Modules/EventManagement', + ); + + foreach ($uploaded as $media) { + $event->files[] = $media; + } + } + + $mediaFiles = $request->getDataJson('media'); + foreach ($mediaFiles as $media) { + $event->files[] = new NullMedia($media); + } + + return $event; + } + + /** + * Validate card create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateEventCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name'))) { + return $val; + } + + return []; + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index c8e2c4e..2313703 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -73,7 +73,7 @@ final class BackendController extends Controller public function viewEventManagementCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-create'); + $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004201001, $request, $response); return $view; diff --git a/Models/Event.php b/Models/Event.php index eac4d3e..544ee7c 100755 --- a/Models/Event.php +++ b/Models/Event.php @@ -78,6 +78,14 @@ class Event */ public string $description = ''; + /** + * Project raw description. + * + * @var string + * @since 1.0.0 + */ + public string $descriptionRaw = ''; + /** * Calendar. * diff --git a/Models/NullEvent.php b/Models/NullEvent.php new file mode 100644 index 0000000..fc6eabb --- /dev/null +++ b/Models/NullEvent.php @@ -0,0 +1,47 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Theme/Backend/eventmanagement-create.tpl.php b/Theme/Backend/eventmanagement-create.tpl.php deleted file mode 100755 index cb2ee15..0000000 --- a/Theme/Backend/eventmanagement-create.tpl.php +++ /dev/null @@ -1,49 +0,0 @@ -data['nav']->render(); ?> - -
-
-
-

getHtml('Event'); ?>

-
-
- -
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/Theme/Backend/eventmanagement-view.tpl.php b/Theme/Backend/eventmanagement-view.tpl.php index 6a9fdab..da4d53b 100644 --- a/Theme/Backend/eventmanagement-view.tpl.php +++ b/Theme/Backend/eventmanagement-view.tpl.php @@ -12,65 +12,115 @@ */ declare(strict_types=1); -$event = $this->data['event']; +use Modules\EventManagement\Models\NullEvent; +use Modules\EventManagement\Models\ProgressType; + +/** \Modules\EventManagement\Models\Event $event */ +$event = $this->data['event'] ?? new NullEvent(); + +$isNew = $event->id === 0; echo $this->data['nav']->render(); ?>
-
-

printHtml($event->getName()); ?>

-
-
- - -
-
-
- -
- -
-
-
-
- getProgressType() !== \Modules\EventManagement\Models\ProgressType::MANUAL ? ' disabled' : ''; ?>> -
-
-
-
-
+
+
+
getHtml('Event'); ?>
+
+
+ + +
+ +
+ + +
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+
+ +
+ + +
+ +
+ +
+
+ +
+
+ progressType !== ProgressType::MANUAL ? ' disabled' : ''; ?>> +
+
+
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + + + + +
+
+
getData('tasklist')->render($event->tasks); ?>
+
+
getData('calendar')->render($event->getCalendar()); ?>
- getData('medialist')->render($event->files); ?> + getData('medialist')->render($event->files); ?>
- -
-
-
-

Finances

-
-
-
\ No newline at end of file + diff --git a/tests/Models/EventMapperTest.php b/tests/Models/EventMapperTest.php index 327fe2b..f179d87 100755 --- a/tests/Models/EventMapperTest.php +++ b/tests/Models/EventMapperTest.php @@ -100,7 +100,7 @@ final class EventMapperTest extends \PHPUnit\Framework\TestCase #[\PHPUnit\Framework\Attributes\Group('module')] public function testNewest() : void { - $newest = EventMapper::getAll()->sort('id', OrderType::DESC)->limit(1)->execute(); + $newest = EventMapper::getAll()->sort('id', OrderType::DESC)->limit(1)->executeGetArray(); self::assertCount(1, $newest); }