fix templates

This commit is contained in:
Dennis Eichhorn 2024-04-17 17:45:07 +00:00
parent b632becaad
commit 546567ae87
8 changed files with 244 additions and 23 deletions

View File

@ -80,7 +80,7 @@ return [
],
'^/kanban/card/create(\?.*$|$)' => [
[
'dest' => '\Modules\Kanban\Controller\BackendController:viewKanbanCard',
'dest' => '\Modules\Kanban\Controller\BackendController:viewKanbanCardCreate',
'verb' => RouteVerb::GET,
'active' => true,
'permission' => [

View File

@ -106,6 +106,12 @@ final class BackendController extends Controller
public function viewKanbanBoard(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
if (!$request->hasData('id')) {
$response->header->status = RequestStatusCode::R_404;
$view->setTemplate('/Web/Backend/Error/404');
return $view;
}
/** @var \Modules\Kanban\Models\KanbanBoard $board */
$board = KanbanBoardMapper::get()
@ -117,6 +123,7 @@ final class BackendController extends Controller
->with('columns/cards/tags/title')
->where('id', (int) $request->getData('id'))
->where('columns/cards/tags/title/language', $request->header->l11n->language)
->sort('columns/order', OrderType::ASC)
->execute();
$accountId = $request->header->account;
@ -138,6 +145,39 @@ final class BackendController extends Controller
return $view;
}
/**
* Routing end-point for application behavior.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewKanbanBoardEdit(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
if (!$request->hasData('id')) {
$response->header->status = RequestStatusCode::R_404;
$view->setTemplate('/Web/Backend/Error/404');
return $view;
}
$view->setTemplate('/Modules/Kanban/Theme/Backend/kanban-board-create');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005801001, $request, $response);
$view->data['board'] = KanbanBoardMapper::get()
->with('columns')
->where('id', (int) $request->getData('id'))
->execute();
return $view;
}
/**
* Routing end-point for application behavior.
*
@ -185,9 +225,7 @@ final class BackendController extends Controller
{
$view = new View($this->app->l11nManager, $request, $response);
$accountId = $request->header->account;
if (!$this->app->accountManager->get($accountId)->hasPermission(
if (!$this->app->accountManager->get($request->header->account)->hasPermission(
PermissionType::CREATE, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::BOARD)
) {
$view->setTemplate('/Web/Backend/Error/403_inline');
@ -219,6 +257,12 @@ final class BackendController extends Controller
public function viewKanbanCard(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
if (!$request->hasData('id')) {
$response->header->status = RequestStatusCode::R_404;
$view->setTemplate('/Web/Backend/Error/404');
return $view;
}
/** @var \Modules\Kanban\Models\KanbanCard $card */
$card = KanbanCardMapper::get()
@ -279,4 +323,32 @@ final class BackendController extends Controller
return $view;
}
/**
* Routing end-point for application behavior.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewKanbanCardCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
if (!$request->hasData('column')) {
$response->header->status = RequestStatusCode::R_404;
$view->setTemplate('/Web/Backend/Error/404');
return $view;
}
$view->setTemplate('/Modules/Kanban/Theme/Backend/kanban-card');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005801001, $request, $response);
return $view;
}
}

View File

@ -20,6 +20,9 @@ return ['Kanban' => [
'Back' => 'Zurück',
'Date' => 'Datum',
'Description' => 'Beschreibung',
'Columns' => 'Spalten',
'Column' => 'Spalte',
'Order' => 'Order',
'Board' => 'Board',
'Name' => 'Name',
'Status' => 'Status',

View File

@ -20,6 +20,9 @@ return ['Kanban' => [
'Back' => 'Back',
'Date' => 'Date',
'Description' => 'Description',
'Order' => 'Order',
'Columns' => 'Columns',
'Column' => 'Column',
'Board' => 'Board',
'Name' => 'Name',
'Status' => 'Status',

View File

@ -11,33 +11,133 @@
* @link https://jingga.app
*/
declare(strict_types=1);
use Modules\Kanban\Models\NullKanbanBoard;
use phpOMS\Uri\UriFactory;
$board = $this->data['board'] ?? new NullKanbanBoard();
$isNew = $board->id === 0;
echo $this->data['nav']->render();
?>
<div class="row">
<div class="col-xs-12 col-md-6 col-lg-4">
<section class="portlet">
<form action="<?= \phpOMS\Uri\UriFactory::build('{/api}kanban/create?csrf={$CSRF}'); ?>" method="post">
<form action="<?= \phpOMS\Uri\UriFactory::build('{/api}kanban?csrf={$CSRF}'); ?>" method="<?= $isNew ? 'PUT' : 'POST'; ?>">
<div class="portlet-head"><?= $this->getHtml('Board'); ?></div>
<div class="portlet-body">
<div class="form-group">
<label for="iTitle"><?= $this->getHtml('Name'); ?></label>
<input id="iTitle" type="text" name="title" required>
<input id="iTitle" type="text" name="title" value="<?= $this->printHtml($board->name); ?>" required>
</div>
<div class="form-group">
<label for="iDescription"><?= $this->getHtml('Description'); ?></label>
<textarea id="iDescription" name="plain"></textarea>
<textarea id="iDescription" name="plain"><?= $this->printTextarea($board->descriptionRaw); ?></textarea>
</div>
</div>
<div class="portlet-foot">
<input type="Submit" value="<?= $this->getHtml('Create', '0', '0'); ?>">
<?php if ($isNew) : ?>
<input id="iCreateSubmit" type="Submit" value="<?= $this->getHtml('Create', '0', '0'); ?>">
<?php else : ?>
<input id="iSaveSubmit" type="Submit" value="<?= $this->getHtml('Save', '0', '0'); ?>">
<?php endif; ?>
</div>
</form>
</section>
</div>
</div>
<?php if (!$isNew) : ?>
<div class="row">
<div class="col-xs-12 col-md-6">
<section class="portlet">
<form id="columnForm" action="<?= UriFactory::build('{/api}kanban/column?csrf={$CSRF}'); ?>" method="post"
data-ui-container="#columnTable tbody"
data-add-form="columnForm"
data-add-tpl="#columnTable tbody .oms-add-tpl-column">
<div class="portlet-head"><?= $this->getHtml('Column'); ?></div>
<div class="portlet-body">
<div class="form-group">
<label for="iColumnId"><?= $this->getHtml('ID', '0', '0'); ?></label>
<input type="text" id="iColumnId" name="id" data-tpl-text="/id" data-tpl-value="/id" disabled>
</div>
<div class="form-group">
<label for="iColumnTitle"><?= $this->getHtml('Name'); ?></label>
<input id="iColumnTitle" type="text" name="title" data-tpl-text="/title" data-tpl-value="/title" required>
</div>
<div class="form-group">
<label for="iColumnOrder"><?= $this->getHtml('Order'); ?></label>
<input id="iColumnOrder" type="number" step="1" min="0" name="order" data-tpl-text="/order" data-tpl-value="/order" required>
</div>
</div>
<div class="portlet-foot">
<input id="bAttributeAdd" formmethod="put" type="submit" class="add-form" value="<?= $this->getHtml('Add', '0', '0'); ?>">
<input id="bAttributeSave" formmethod="post" type="submit" class="save-form vh button save" value="<?= $this->getHtml('Update', '0', '0'); ?>">
<input id="bAttributeCancel" type="submit" class="cancel-form vh button close" value="<?= $this->getHtml('Cancel', '0', '0'); ?>">
</div>
</form>
</section>
</div>
<div class="col-xs-12 col-md-6">
<section class="portlet">
<div class="portlet-head"><?= $this->getHtml('Columns',); ?><i class="g-icon download btn end-xs">download</i></div>
<div class="slider">
<table id="columnTable" class="default sticky"
data-tag="form"
data-ui-element="tr"
data-add-tpl=".oms-add-tpl-column"
data-update-form="columnForm">
<thead>
<tr>
<td>
<td><?= $this->getHtml('ID', '0', '0'); ?>
<td><?= $this->getHtml('Order'); ?>
<td class="wf-100"><?= $this->getHtml('Name'); ?>
<tbody>
<template class="oms-add-tpl-column">
<tr class="animated medium-duration greenCircleFade" data-id="" draggable="false">
<td>
<i class="g-icon btn update-form">settings</i>
<input id="columnTable-remove-0" type="checkbox" class="vh">
<label for="columnTable-remove-0" class="checked-visibility-alt"><i class="g-icon btn form-action">close</i></label>
<span class="checked-visibility">
<label for="columnTable-remove-0" class="link default"><?= $this->getHtml('Cancel', '0', '0'); ?></label>
<label for="columnTable-remove-0" class="remove-form link cancel"><?= $this->getHtml('Delete', '0', '0'); ?></label>
</span>
<td data-tpl-text="/id" data-tpl-value="/id"></td>
<td data-tpl-text="/order" data-tpl-value="/order" data-value=""></td>
<td data-tpl-text="/title" data-tpl-value="/title"></td>
</tr>
</template>
<?php
$c = 0;
foreach ($board->columns as $column) : ++$c; ?>
<tr data-id="<?= $column->id; ?>">
<td>
<i class="g-icon btn update-form">settings</i>
<input id="columnTable-remove-<?= $column->id; ?>" type="checkbox" class="vh">
<label for="columnTable-remove-<?= $column->id; ?>" class="checked-visibility-alt"><i class="g-icon btn form-action">close</i></label>
<span class="checked-visibility">
<label for="columnTable-remove-<?= $column->id; ?>" class="link default"><?= $this->getHtml('Cancel', '0', '0'); ?></label>
<label for="columnTable-remove-<?= $column->id; ?>" class="remove-form link cancel"><?= $this->getHtml('Delete', '0', '0'); ?></label>
</span>
<td data-tpl-text="/id" data-tpl-value="/id"><?= $column->id; ?>
<td data-tpl-text="/order" data-tpl-value="/order"><?= $column->order; ?>
<td data-tpl-text="/title" data-tpl-value="/title"><?= $this->printHtml($column->name); ?>
<?php endforeach; ?>
<?php if ($c === 0) : ?>
<tr><td colspan="2" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
</div>
</section>
</div>
</div>
<?php endif; ?>
<!--
@todo Implement
<?= $this->data['permissionView']->render('board_permission'); ?>
@todo Implement permissions
-->

View File

@ -12,25 +12,23 @@
*/
declare(strict_types=1);
use Modules\Kanban\Models\NullKanbanBoard;
use phpOMS\Uri\UriFactory;
/** @var \Modules\Kanban\Models\KanbanBoard $board */
$board = $this->data['board'];
/** @var \Modules\Kanban\Models\KanbanColumn[] $columns */
$columns = $board->getColumns();
$board = $this->data['board'] ?? new NullKanbanBoard();
?>
<div class="row">
<div class="box">
<a class="button" href="<?= UriFactory::build('{/base}/kanban/edit?board=' . $board->id); ?>"><?= $this->getHtml('Edit', '0', '0'); ?></a>
<a class="button" href="<?= UriFactory::build('{/base}/kanban/edit?id=' . $board->id); ?>"><?= $this->getHtml('Edit', '0', '0'); ?></a>
</div>
</div>
<div class="row kanban-board" style="flex-wrap: nowrap;">
<?php $i = 0; foreach ($columns as $column) : $i++; $cards = $column->getCards(); ?>
<?php $i = 0; foreach ($board->columns as $column) : $i++; $cards = $column->getCards(); ?>
<div id="kanban-column-<?= $i; ?>" class="box col-xs-3" style="min-width: 300px;">
<header class="simple-flex">
<span><?= $this->printHtml($column->name); ?></span>
<a href="<?= UriFactory::build('{/base}/kanban/card/create?{?}&id=' . $board->id); ?>"><i class="g-icon">add_circle</i></a>
<a href="<?= UriFactory::build('{/base}/kanban/card/create?column=' . $board->id); ?>"><i class="g-icon">add_circle</i></a>
</header>
<?php $j = 0; foreach ($cards as $card) : $j++;
$url = UriFactory::build('{/base}/kanban/card/view?{?}&id=' . $card->id);

View File

@ -17,6 +17,9 @@ use phpOMS\Uri\UriFactory;
/** @var \Modules\Kanban\Models\KanbanCard $card */
$card = $this->data['card'];
$isNew = $card->id === 0;
$editPossible = $card->createdBy->id === $this->request->header->account;
?>
<div class="row">
@ -27,23 +30,65 @@ $card = $this->data['card'];
<div class="row">
<div class="col-xs-12">
<?php if ($editPossible) : ?>
<form id="iCard" method="<?= $isNew ? 'PUT' : 'POST'; ?>" action="<?= UriFactory::build('{/api}kanban/card?id=' . $card->id . '&csrf={$CSRF}'); ?>"
data-ui-container="#iCard"
data-ui-element=".portlet"
data-update-tpl="#iCard .portlet-tpl">
<template class="portlet-tpl">
<section class="portlet">
<div class="portlet-head"><?= $this->printHtml($card->name); ?></div>
<div class="portlet-head"><input id="iTitle" type="text" name="title" data-tpl-text="/title" data-tpl-value="/title"></div>
<div class="portlet-body">
<article><?= $card->description; ?></article>
<div class="form-group">
<textarea id="iDescription" name="description"
data-tpl-value="/description" required></textarea>
</div>
</div>
<div class="portlet-foot">
<?php $files = $card->files; foreach ($files as $file) : ?>
<span><a class="content" href="<?= UriFactory::build('{/base}/media/view?id=' . $file->id);?>"><?= $file->name; ?></a></span>
<?php endforeach; ?>
<button class="save-form"><?= $this->getHtml('Save', '0', '0'); ?></button>
<button class="cancel cancel-form"><?= $this->getHtml('Cancel', '0', '0'); ?></button>
</div>
</section>
</template>
<?php endif; ?>
<section class="portlet" data-id="<?= $card->id; ?>">
<div class="portlet-head" data-tpl-text="/title" data-tpl-value="/title"><?= $this->printHtml($card->name); ?></div>
<div class="portlet-body">
<article <?php if ($editPossible) : ?>
data-tpl-value="/description"
data-value="<?= \trim(\str_replace(["\r\n", "\n"], ['&#10;', '&#10;'], $this->printHtml($card->descriptionRaw))); ?>"<?php endif; ?>><?= $card->description; ?></article>
<div>
<?php $files = $card->files; foreach ($files as $file) : ?>
<span><a class="content" href="<?= UriFactory::build('{/base}/media/view?id=' . $file->id);?>"><?= $file->name; ?></a></span>
<?php endforeach; ?>
</div>
</div>
<div class="portlet-foot">
<span><a class="content" href="<?= UriFactory::build('{/base}/profile/view?{?}&id=' . $card->createdBy->id); ?>">
<?= $this->printHtml($this->renderUserName(
'%3$s %2$s %1$s',
[$card->createdBy->name1, $card->createdBy->name2, $card->createdBy->name3, $card->createdBy->login ?? '']
)); ?>
</a></span>
<span><?= $card->createdAt->format('Y-m-d H:i:s'); ?></span>
<?php if ($editPossible) : ?>
<div class="end-xs">
<button class="update-form"><?= $this->getHtml('Edit', '0', '0'); ?></button>
</div>
<?php endif; ?>
</div>
</section>
<?php if ($editPossible) : ?>
</form>
<?php endif; ?>
</div>
</div>
<?php
$commentList = $card->commentList;
if ($this->data['commentPermissions']['write'] && $commentList?->status === CommentListStatus::ACTIVE) :
if ($this->data['commentPermissions']['write']
&& $commentList?->status === CommentListStatus::ACTIVE
) :
echo $this->getData('commentCreate')->render(1);
endif;