From eeabd5d0d00282d9aae2283fd62833d14ab88fd9 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Jan 2024 23:34:17 +0000 Subject: [PATCH] update --- Admin/Install/db.json | 136 ++++++++++++++ Admin/Routes/Web/Backend.php | 22 +++ Controller/ApiController.php | 177 ++++++++++++++++++ Controller/BackendController.php | 22 ++- Docs/Dev/img/er.png | Bin 0 -> 15565 bytes Models/Checklist.php | 65 +++++++ Models/ChecklistMapper.php | 76 ++++++++ Models/ChecklistTemplate.php | 71 +++++++ Models/ChecklistTemplateMapper.php | 79 ++++++++ Models/ChecklistTemplateTask.php | 60 ++++++ Models/ChecklistTemplateTaskMapper.php | 74 ++++++++ Models/NullChecklist.php | 47 +++++ Models/NullChecklistTemplate.php | 47 +++++ Models/NullChecklistTemplateTask.php | 46 +++++ Models/PermissionCategory.php | 6 +- Theme/Backend/checklist-task.tpl.php | 98 ++++++++++ Theme/Backend/checklist-template-list.tpl.php | 33 ++-- Theme/Backend/checklist-template.tpl.php | 63 +++++++ info.json | 1 - 19 files changed, 1094 insertions(+), 29 deletions(-) create mode 100644 Admin/Install/db.json create mode 100644 Controller/ApiController.php create mode 100644 Docs/Dev/img/er.png create mode 100644 Models/Checklist.php create mode 100644 Models/ChecklistMapper.php create mode 100644 Models/ChecklistTemplate.php create mode 100644 Models/ChecklistTemplateMapper.php create mode 100644 Models/ChecklistTemplateTask.php create mode 100644 Models/ChecklistTemplateTaskMapper.php create mode 100644 Models/NullChecklist.php create mode 100644 Models/NullChecklistTemplate.php create mode 100644 Models/NullChecklistTemplateTask.php create mode 100644 Theme/Backend/checklist-task.tpl.php create mode 100644 Theme/Backend/checklist-template.tpl.php diff --git a/Admin/Install/db.json b/Admin/Install/db.json new file mode 100644 index 0000000..a1e8ce0 --- /dev/null +++ b/Admin/Install/db.json @@ -0,0 +1,136 @@ +{ + "checklist_checklist_template": { + "name": "checklist_checklist_template", + "fields": { + "checklist_checklist_template_id": { + "name": "checklist_checklist_template_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "checklist_checklist_template_name": { + "name": "checklist_checklist_template_name", + "type": "VARCHAR(255)", + "null": false + }, + "checklist_checklist_template_description": { + "name": "checklist_checklist_template_description", + "type": "TEXT", + "null": false + }, + "checklist_checklist_template_repeat": { + "name": "checklist_checklist_template_repeat", + "type": "TINYINT(1)", + "null": false + }, + "checklist_checklist_template_interval": { + "name": "checklist_checklist_template_interval", + "type": "VARCHAR(255)", + "null": false + }, + "checklist_checklist_template_start": { + "name": "checklist_checklist_template_start", + "type": "DATETIME", + "null": false + }, + "checklist_checklist_template_end": { + "name": "checklist_checklist_template_end", + "type": "DATETIME", + "null": true, + "default": null + } + } + }, + "checklist_checklist_template_task": { + "name": "checklist_checklist_template_task", + "fields": { + "checklist_checklist_template_task_id": { + "name": "checklist_checklist_template_task_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "checklist_checklist_template_task_order": { + "name": "checklist_checklist_template_task_order", + "type": "INT", + "null": false + }, + "checklist_checklist_template_task_template": { + "name": "checklist_checklist_template_task_template", + "type": "INT", + "null": false, + "foreignTable": "checklist_checklist_template", + "foreignKey": "checklist_checklist_template_id" + }, + "checklist_checklist_template_task_task": { + "name": "checklist_checklist_template_task_task", + "type": "INT", + "null": false, + "foreignTable": "task", + "foreignKey": "task_id" + } + } + }, + "checklist_checklist": { + "name": "checklist_checklist", + "fields": { + "checklist_checklist_id": { + "name": "checklist_checklist_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "checklist_checklist_name": { + "name": "checklist_checklist_name", + "type": "VARCHAR(255)", + "null": false + }, + "checklist_checklist_template": { + "name": "checklist_checklist_template", + "type": "INT", + "null": false, + "foreignTable": "checklist_checklist_template", + "foreignKey": "checklist_checklist_template_id" + }, + "checklist_checklist_createdat": { + "name": "checklist_checklist_createdat", + "type": "DATETIME", + "null": false + } + } + }, + "checklist_checklist_task": { + "name": "checklist_checklist_task", + "fields": { + "checklist_checklist_task_id": { + "name": "checklist_checklist_task_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "checklist_checklist_task_order": { + "name": "checklist_checklist_task_order", + "type": "INT", + "null": false + }, + "checklist_checklist_task_template": { + "name": "checklist_checklist_task_template", + "type": "INT", + "null": false, + "foreignTable": "checklist_checklist", + "foreignKey": "checklist_checklist_id" + }, + "checklist_checklist_task_task": { + "name": "checklist_checklist_template_task_task", + "type": "INT", + "null": false, + "foreignTable": "task", + "foreignKey": "task_id" + } + } + } +} \ No newline at end of file diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index b4261b2..55626f8 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -29,6 +29,17 @@ return [ ], ], ], + '^.*/checklist/view.*$' => [ + [ + 'dest' => '\Modules\Checklist\Controller\BackendController:viewChecklistView', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::CHECKLIST, + ], + ], + ], '^.*/checklist/template/list.*$' => [ [ 'dest' => '\Modules\Checklist\Controller\BackendController:viewChecklistTemplateList', @@ -62,4 +73,15 @@ return [ ], ], ], + '^.*/checklist/template/task.*$' => [ + [ + 'dest' => '\Modules\Checklist\Controller\BackendController:viewChecklistTemplateTaskView', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::TEMPLATE, + ], + ], + ], ]; diff --git a/Controller/ApiController.php b/Controller/ApiController.php new file mode 100644 index 0000000..884a4f2 --- /dev/null +++ b/Controller/ApiController.php @@ -0,0 +1,177 @@ +validateChecklistTemplateCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $checklist = $this->createChecklistTemplateFromRequest($request); + $this->createModel($request->header->account, $checklist, ChecklistTemplateMapper::class, 'checklist_template', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $checklist); + } + + /** + * Validate checklist create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateChecklistTemplateCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + ) { + return $val; + } + + return []; + } + + /** + * Method to create checklist from request. + * + * @param RequestAbstract $request Request + * + * @return ChecklistTemplate + * + * @since 1.0.0 + */ + private function createChecklistTemplateFromRequest(RequestAbstract $request) : ChecklistTemplate + { + $checklist = new ChecklistTemplate(); + $checklist->name = (string) $request->getData('name'); + $checklist->description = $request->getDataString('description') ?? ''; + $checklist->repeat = 0; + $checklist->interval = $request->getDataString('interval') ?? ''; + $checklist->start = $request->getDataDateTime('start') ?? new \DateTime('now'); + $checklist->end = $request->getDataDateTime('end'); + + return $checklist; + } + + /** + * Api method to create an checklist + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiChecklistTemplateTaskCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateChecklistTemplateTaskCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $checklist = $this->createChecklistTemplateTaskFromRequest($request); + $this->createModel($request->header->account, $checklist, ChecklistTemplateTaskMapper::class, 'checklist_template_task', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $checklist); + } + + /** + * Validate checklist create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateChecklistTemplateTaskCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['template'] = !$request->hasData('template')) + ) { + return $val; + } + + return []; + } + + /** + * Method to create checklist from request. + * + * @param RequestAbstract $request Request + * + * @return ChecklistTemplateTask + * + * @since 1.0.0 + */ + private function createChecklistTemplateTaskFromRequest(RequestAbstract $request) : ChecklistTemplateTask + { + $request->setData('type', TaskType::TEMPLATE, true); + + $checklistTask = new ChecklistTemplateTask(); + $checklistTask->template = (int) $request->getData('template'); + $checklistTask->task = $this->app->moduleManager->get('Tasks', 'Api')->createTaskFromRequest($request); + + return $checklistTask; + } +} diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 7561cf2..0bae666 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace Modules\Checklist\Controller; +use Modules\Checklist\Models\ChecklistTemplateMapper; use phpOMS\Contract\RenderableInterface; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; @@ -31,7 +32,7 @@ use phpOMS\Views\View; final class BackendController extends Controller { /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -52,7 +53,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -69,11 +70,14 @@ final class BackendController extends Controller $view->setTemplate('/Modules/Checklist/Theme/Backend/checklist-template-list'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003601001, $request, $response); + $view->data['templates'] = ChecklistTemplateMapper::getAll() + ->execute(); + return $view; } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -94,7 +98,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -111,6 +115,16 @@ final class BackendController extends Controller $view->setTemplate('/Modules/Checklist/Theme/Backend/checklist-template'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003601001, $request, $response); + $view->data['template'] = ChecklistTemplateMapper::get() + ->with('tasks') + ->with('tasks/taskElements') + ->with('tasks/taskElements/accRelation') + ->with('tasks/taskElements/accRelation/relation') + ->with('tasks/taskElements/grpRelation') + ->with('tasks/taskElements/grpRelation/relation') + ->where('id', (int) $request->getData('id')) + ->execute(); + return $view; } } diff --git a/Docs/Dev/img/er.png b/Docs/Dev/img/er.png new file mode 100644 index 0000000000000000000000000000000000000000..8faa0c3d3115494546f845c2ba6e4fac3114bff2 GIT binary patch literal 15565 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 Ji5tE7e*jeVYFPjP literal 0 HcmV?d00001 diff --git a/Models/Checklist.php b/Models/Checklist.php new file mode 100644 index 0000000..d51d00c --- /dev/null +++ b/Models/Checklist.php @@ -0,0 +1,65 @@ +createdAt = new \DateTimeImmutable(); + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/ChecklistMapper.php b/Models/ChecklistMapper.php new file mode 100644 index 0000000..22f1cbf --- /dev/null +++ b/Models/ChecklistMapper.php @@ -0,0 +1,76 @@ + + */ +final class ChecklistMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'checklist_checklist_id' => ['name' => 'checklist_checklist_id', 'type' => 'int', 'internal' => 'id'], + 'checklist_checklist_name' => ['name' => 'checklist_checklist_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'checklist_checklist_template' => ['name' => 'checklist_checklist_template', 'type' => 'int', 'internal' => 'template'], + 'checklist_checklist_createdat' => ['name' => 'checklist_checklist_createdat', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'tasks' => [ + 'mapper' => TaskMapper::class, + 'table' => 'checklist_checklist_task', + 'self' => 'checklist_checklist_task_task', + 'external' => null, + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'checklist_checklist'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'checklist_checklist_id'; +} diff --git a/Models/ChecklistTemplate.php b/Models/ChecklistTemplate.php new file mode 100644 index 0000000..e898e91 --- /dev/null +++ b/Models/ChecklistTemplate.php @@ -0,0 +1,71 @@ +start = new \DateTime(); + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/ChecklistTemplateMapper.php b/Models/ChecklistTemplateMapper.php new file mode 100644 index 0000000..1772ba4 --- /dev/null +++ b/Models/ChecklistTemplateMapper.php @@ -0,0 +1,79 @@ + + */ +final class ChecklistTemplateMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'checklist_checklist_template_id' => ['name' => 'checklist_checklist_template_id', 'type' => 'int', 'internal' => 'id'], + 'checklist_checklist_template_name' => ['name' => 'checklist_checklist_template_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'checklist_checklist_template_description' => ['name' => 'checklist_checklist_template_description', 'type' => 'string', 'internal' => 'description'], + 'checklist_checklist_template_repeat' => ['name' => 'checklist_checklist_template_repeat', 'type' => 'int', 'internal' => 'repeat'], + 'checklist_checklist_template_interval' => ['name' => 'checklist_checklist_template_interval', 'type' => 'string', 'internal' => 'interval'], + 'checklist_checklist_template_start' => ['name' => 'checklist_checklist_template_start', 'type' => 'DateTime', 'internal' => 'start'], + 'checklist_checklist_template_end' => ['name' => 'checklist_checklist_template_end', 'type' => 'DateTime', 'internal' => 'end'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'tasks' => [ + 'mapper' => TaskMapper::class, + 'table' => 'checklist_checklist_template_task', + 'external' => 'checklist_checklist_template_task_task', + 'self' => 'checklist_checklist_template_task_template', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'checklist_checklist_template'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'checklist_checklist_template_id'; +} diff --git a/Models/ChecklistTemplateTask.php b/Models/ChecklistTemplateTask.php new file mode 100644 index 0000000..a04356c --- /dev/null +++ b/Models/ChecklistTemplateTask.php @@ -0,0 +1,60 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/ChecklistTemplateTaskMapper.php b/Models/ChecklistTemplateTaskMapper.php new file mode 100644 index 0000000..e0ee330 --- /dev/null +++ b/Models/ChecklistTemplateTaskMapper.php @@ -0,0 +1,74 @@ + + */ +final class ChecklistTemplateTaskMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'checklist_checklist_template_task_id' => ['name' => 'checklist_checklist_template_task_id', 'type' => 'int', 'internal' => 'id'], + 'checklist_checklist_template_task_order' => ['name' => 'checklist_checklist_template_task_order', 'type' => 'int', 'internal' => 'order'], + 'checklist_checklist_template_task_template' => ['name' => 'checklist_checklist_template_task_template', 'type' => 'int', 'internal' => 'template'], + 'checklist_checklist_template_task_task' => ['name' => 'checklist_checklist_template_task_task', 'type' => 'int', 'internal' => 'task'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'task' => [ + 'mapper' => TaskMapper::class, + 'external' => 'checklist_checklist_template_task_task', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'checklist_checklist_template_task'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'checklist_checklist_template_task_id'; +} diff --git a/Models/NullChecklist.php b/Models/NullChecklist.php new file mode 100644 index 0000000..73404c8 --- /dev/null +++ b/Models/NullChecklist.php @@ -0,0 +1,47 @@ +id = $id; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/NullChecklistTemplate.php b/Models/NullChecklistTemplate.php new file mode 100644 index 0000000..f01600e --- /dev/null +++ b/Models/NullChecklistTemplate.php @@ -0,0 +1,47 @@ +id = $id; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/NullChecklistTemplateTask.php b/Models/NullChecklistTemplateTask.php new file mode 100644 index 0000000..3600ad1 --- /dev/null +++ b/Models/NullChecklistTemplateTask.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index 45beb7f..48f9dc9 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -17,7 +17,7 @@ namespace Modules\Checklist\Models; use phpOMS\Stdlib\Base\Enum; /** - * Permision state enum. + * Permission category enum. * * @package Modules\Checklist\Models * @license OMS License 2.0 @@ -28,5 +28,7 @@ abstract class PermissionCategory extends Enum { public const CHECKLIST = 1; - public const TEMPLATE = 2; + public const TASK = 2; + + public const TEMPLATE = 3; } diff --git a/Theme/Backend/checklist-task.tpl.php b/Theme/Backend/checklist-task.tpl.php new file mode 100644 index 0000000..f201c00 --- /dev/null +++ b/Theme/Backend/checklist-task.tpl.php @@ -0,0 +1,98 @@ +data['nav']->render(); ?> + +
+
+
+
+
getHtml('Task'); ?>
+
+
+ + getData('accGrpSelector')->render('iReceiver', 'forward', true); ?> +
+ +
+ + getData('accGrpSelector')->render('iCC', 'cc', false); ?> +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ data['editor']->render('task-editor'); ?> +
+ +
+ data['editor']->getData('text')->render('task-editor', 'plain', 'fTask'); ?> +
+
+
+ + +
+
+
+
+ +
+
+
getHtml('Media'); ?>
+
+
+
+ +
+
+
+
+
+ +
+ + +
+
+ +
+
+
+ +getData('accGrpSelector')->getData('popup')->render(); ?> \ No newline at end of file diff --git a/Theme/Backend/checklist-template-list.tpl.php b/Theme/Backend/checklist-template-list.tpl.php index 6e0a2ea..1ef7c1e 100755 --- a/Theme/Backend/checklist-template-list.tpl.php +++ b/Theme/Backend/checklist-template-list.tpl.php @@ -15,42 +15,31 @@ declare(strict_types=1); /** * @var \phpOMS\Views\View $this */ - -$footerView = new \phpOMS\Views\PaginationView($this->l11nManager, $this->request, $this->response); -$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig'); - -$footerView->setPages(25); -$footerView->setPage(1); -$footerView->setResults(1); - echo $this->data['nav']->render(); ?>
-
+
+
getHtml('Templates'); ?>download
- - $value) : ++$c; - $url = \phpOMS\Uri\UriFactory::build('checklist/single?{?}&id=' . $value->id); ?> - + data['templates'] as $key => $value) : ++$c; + $url = \phpOMS\Uri\UriFactory::build('{/base}/checklist/template/view?{?}&id=' . $value->id); + ?> + -
getHtml('Templates'); ?>download
getHtml('ID', '0', '0'); ?> - getHtml('Status'); ?> getHtml('Name'); ?> - getHtml('Creator'); ?> - getHtml('Created'); ?>
id; ?> printHtml($value->name); ?> - printHtml($value->parent); ?> - printHtml($value->getUnit()); ?> - - + +
getHtml('Empty', '0', '0'); ?> - + getHtml('Empty', '0', '0'); ?> +
diff --git a/Theme/Backend/checklist-template.tpl.php b/Theme/Backend/checklist-template.tpl.php new file mode 100644 index 0000000..7230618 --- /dev/null +++ b/Theme/Backend/checklist-template.tpl.php @@ -0,0 +1,63 @@ +data['nav']->render(); ?> + +
+
+
+
getHtml('Tasks'); ?>download
+
+ + + + + data['template']->tasks as $key => $task) : ++$c; + $url = \phpOMS\Uri\UriFactory::build('{/base}/checklist/template/task?{?}&id=' . $task->id); + ?> + + +
getHtml('Due/Priority', 'Tasks', 'Backend'); ?> + getHtml('Title', 'Tasks', 'Backend'); ?> + getHtml('For', 'Tasks', 'Backend'); ?> +
getPriority() === TaskPriority::NONE) : ?> + due?->getTimestamp() - $task->createdAt?->getTimestamp()); ?> + + getHtml('P' . $task->getPriority(), 'Tasks', 'Backend'); ?> + + printHtml($task->title); ?> + taskElements); + foreach ($element->accRelation as $rel): ?> + printHtml( + \sprintf('%3$s %2$s %1$s', $rel->relation->name1, $rel->relation->name2, $rel->relation->name3) + ); ?> + + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/info.json b/info.json index ac80c3c..ad79406 100755 --- a/info.json +++ b/info.json @@ -14,7 +14,6 @@ "name": "Jingga", "website": "jingga.app" }, - "description": "The administration module.", "directory": "Checklist", "dependencies": { "Admin": "1.0.0",