many small fixes

This commit is contained in:
Dennis Eichhorn 2023-02-10 18:20:57 +01:00
parent f696b5e7fc
commit 508718fed3
5 changed files with 174 additions and 4 deletions

View File

@ -200,6 +200,37 @@
}
}
},
"support_attr_value_l11n": {
"name": "support_attr_value_l11n",
"fields": {
"support_attr_value_l11n_id": {
"name": "support_attr_value_l11n_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"support_attr_value_l11n_title": {
"name": "support_attr_value_l11n_title",
"type": "VARCHAR(255)",
"null": false
},
"support_attr_value_l11n_value": {
"name": "support_attr_value_l11n_value",
"type": "INT(11)",
"null": false,
"foreignTable": "support_attr_value",
"foreignKey": "support_attr_value_id"
},
"support_attr_value_l11n_lang": {
"name": "support_attr_value_l11n_lang",
"type": "VARCHAR(2)",
"null": false,
"foreignTable": "language",
"foreignKey": "language_639_1"
}
}
},
"support_ticket_attr_default": {
"name": "support_ticket_attr_default",
"fields": {

View File

@ -29,6 +29,7 @@ use Modules\Support\Models\TicketAttributeTypeL11n;
use Modules\Support\Models\TicketAttributeTypeL11nMapper;
use Modules\Support\Models\TicketAttributeTypeMapper;
use Modules\Support\Models\TicketAttributeValue;
use Modules\Support\Models\TicketAttributeValueL11nMapper;
use Modules\Support\Models\TicketAttributeValueMapper;
use Modules\Support\Models\TicketElement;
use Modules\Support\Models\TicketElementMapper;
@ -114,7 +115,7 @@ final class ApiController extends Controller
*/
private function createTicketFromRequest(RequestAbstract $request) : Ticket
{
$request->setData('redirect', 'support/ticket?for={?id}');
$request->setData('redirect', 'support/ticket?for={$id}');
$task = $this->app->moduleManager->get('Tasks')->createTaskFromRequest($request);
$task->setType(TaskType::HIDDEN);
@ -696,4 +697,73 @@ final class ApiController extends Controller
return [];
}
/**
* Api method to create ticket attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiTicketAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateTicketAttributeValueL11nCreate($request))) {
$response->set('attr_value_l11n_create', new FormValidation($val));
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrL11n = $this->createTicketAttributeValueL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, TicketAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type localization', 'Attribute type localization successfully created', $attrL11n);
}
/**
* Method to create ticket attribute l11n from request.
*
* @param RequestAbstract $request Request
*
* @return BaseStringL11n
*
* @since 1.0.0
*/
private function createTicketAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$attrL11n = new BaseStringL11n();
$attrL11n->ref = (int) ($request->getData('value') ?? 0);
$attrL11n->setLanguage((string) (
$request->getData('language') ?? $request->getLanguage()
));
$attrL11n->content = (string) ($request->getData('title') ?? '');
return $attrL11n;
}
/**
* Validate ticket attribute l11n create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateTicketAttributeValueL11nCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = empty($request->getData('title')))
|| ($val['value'] = empty($request->getData('value')))
) {
return $val;
}
return [];
}
}

View File

@ -122,13 +122,16 @@ final class BackendController extends Controller
$mapperQuery = TicketMapper::get()
->with('task')
->with('task/createdBy')
->with('task/tags')
->with('task/tags/title')
->with('ticketElements')
->with('ticketElements/taskElement')
->with('ticketElements/taskElement/createdBy')
->with('ticketElements/taskElement/media')
->with('attributes')
->with('for')
->with('app');
->with('app')
->where('task/tags/title/language', $request->getLanguage());
/** @var \Modules\Support\Models\Ticket $ticket */
$ticket = $request->getData('for') !== null

View File

@ -0,0 +1,66 @@
<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package Modules\Support\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Support\Models;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/**
* Item mapper class.
*
* @package Modules\Support\Models
* @license OMS License 1.0
* @link https://jingga.app
* @since 1.0.0
*/
final class TicketAttributeValueL11nMapper extends DataMapperFactory
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
public const COLUMNS = [
'support_attr_value_l11n_id' => ['name' => 'support_attr_value_l11n_id', 'type' => 'int', 'internal' => 'id'],
'support_attr_value_l11n_title' => ['name' => 'support_attr_value_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true],
'support_attr_value_l11n_value' => ['name' => 'support_attr_value_l11n_value', 'type' => 'int', 'internal' => 'ref'],
'support_attr_value_l11n_lang' => ['name' => 'support_attr_value_l11n_lang', 'type' => 'string', 'internal' => 'language'],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
public const TABLE = 'support_attr_value_l11n';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
public const PRIMARYFIELD ='support_attr_value_l11n_id';
/**
* Model to use by the mapper.
*
* @var class-string
* @since 1.0.0
*/
public const MODEL = BaseStringL11n::class;
}

View File

@ -179,7 +179,7 @@ echo $this->getData('nav')->render(); ?>
) : ?>
<section class="portlet">
<div class="portlet-body">
<?= \sprintf($this->getHtml('status_change'),
<?= \sprintf($this->getHtml('status_change', 'Tasks', 'Backend'),
'<a href="' . UriFactory::build('profile/single?{?}&for=' . $element->taskElement->createdBy->getId()) . '">' . $this->printHtml($element->taskElement->createdBy->name1) . '</a>',
$element->taskElement->createdAt->format('Y-m-d H:i')
); ?>
@ -195,7 +195,7 @@ echo $this->getData('nav')->render(); ?>
) : ?>
<section class="portlet">
<div class="portlet-body">
<?= \sprintf($this->getHtml('priority_change'),
<?= \sprintf($this->getHtml('priority_change', 'Tasks', 'Backend'),
'<a href="' . UriFactory::build('profile/single?{?}&for=' . $element->taskElement->createdBy->getId()) . '">' . $this->printHtml($element->taskElement->createdBy->name1) . '</a>',
$element->taskElement->createdAt->format('Y-m-d H:i')
); ?>