mirror of
https://github.com/Karaka-Management/oms-Kanban.git
synced 2026-01-10 19:08:41 +00:00
fix templates
This commit is contained in:
parent
b632becaad
commit
546567ae87
|
|
@ -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' => [
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ return ['Kanban' => [
|
|||
'Back' => 'Back',
|
||||
'Date' => 'Date',
|
||||
'Description' => 'Description',
|
||||
'Order' => 'Order',
|
||||
'Columns' => 'Columns',
|
||||
'Column' => 'Column',
|
||||
'Board' => 'Board',
|
||||
'Name' => 'Name',
|
||||
'Status' => 'Status',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
-->
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"], [' ', ' '], $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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user