From 3083958d0ca3457b92735a850cfe30e06a7f8441 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Fri, 11 Oct 2024 19:17:40 +0000 Subject: [PATCH] bug fixes --- Admin/Installer.php | 12 +- Admin/Routes/Web/Api.php | 283 +++++++++++++++++++++++++++++ Controller/ApiController.php | 52 +++--- Theme/Backend/element-view.tpl.php | 2 +- 4 files changed, 321 insertions(+), 28 deletions(-) create mode 100644 Admin/Routes/Web/Api.php diff --git a/Admin/Installer.php b/Admin/Installer.php index 54872d2..1999fcc 100644 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -92,7 +92,7 @@ final class Installer extends InstallerAbstract $request->header->account = 1; $request->setData('name', $type['name'] ?? ''); - $request->setData('title', \reset($type['l11n'])); + $request->setData('content', \reset($type['l11n'])); $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); $module->apiExpenseTypeCreate($request, $response); @@ -117,9 +117,9 @@ final class Installer extends InstallerAbstract $request = new HttpRequest(); $request->header->account = 1; - $request->setData('title', $l11n); + $request->setData('content', $l11n); $request->setData('language', $language); - $request->setData('type', $expenseTypes[$type['name']]['id']); + $request->setData('ref', $expenseTypes[$type['name']]['id']); $module->apiExpenseTypeL11nCreate($request, $response); } @@ -153,7 +153,7 @@ final class Installer extends InstallerAbstract $request->header->account = 1; $request->setData('name', $type['name'] ?? ''); - $request->setData('title', \reset($type['l11n'])); + $request->setData('content', \reset($type['l11n'])); $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); $module->apiExpenseElementTypeCreate($request, $response); @@ -178,9 +178,9 @@ final class Installer extends InstallerAbstract $request = new HttpRequest(); $request->header->account = 1; - $request->setData('title', $l11n); + $request->setData('content', $l11n); $request->setData('language', $language); - $request->setData('type', $elementTypes[$type['name']]['id']); + $request->setData('ref', $elementTypes[$type['name']]['id']); $module->apiExpenseElementTypeL11nCreate($request, $response); } diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php new file mode 100644 index 0000000..2d929fe --- /dev/null +++ b/Admin/Routes/Web/Api.php @@ -0,0 +1,283 @@ + [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseFind', + 'verb' => RouteVerb::GET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + '^.*/businessexpenses/expense(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/type(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseTypeCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseTypeUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/type/l11n(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiContractTypeController:apiExpenseTypeL11nCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiContractTypeController:apiExpenseTypeL11nUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/file(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiMediaAddToExpense', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/note(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteDelete', + 'verb' => RouteVerb::DELETE, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::DELETE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/element(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseElementCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseElementUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/element/type(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseElementTypeCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiExpenseElementTypeUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/element/type/l11n(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiContractTypeController:apiExpenseElementTypeL11nCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiContractTypeController:apiExpenseTypeL11nUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/element/file(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiMediaAddToExpenseElement', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], + + '^.*/businessexpenses/expense/element/note(\?.*|$)$' => [ + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteUpdate', + 'verb' => RouteVerb::SET, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::MODIFY, + 'state' => PermissionCategory::EXPENSE, + ], + ], + [ + 'dest' => '\Modules\BusinessExpenses\Controller\ApiController:apiNoteDelete', + 'verb' => RouteVerb::DELETE, + 'csrf' => true, + 'active' => true, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::DELETE, + 'state' => PermissionCategory::EXPENSE, + ], + ], + ], +]; \ No newline at end of file diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 956ba78..854a451 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -99,7 +99,7 @@ final class ApiController extends Controller $type = new BaseStringL11nType(); $type->title = $request->getDataString('name') ?? ''; $type->setL11n( - $request->getDataString('title') ?? '', + $request->getDataString('content') ?? '', ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? ISO639x1Enum::_EN ); @@ -119,7 +119,7 @@ final class ApiController extends Controller { $val = []; if (($val['name'] = !$request->hasData('name')) - || ($val['title'] = !$request->hasData('title')) + || ($val['content'] = !$request->hasData('content')) ) { return $val; } @@ -166,9 +166,9 @@ final class ApiController extends Controller private function createExpenseTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n { $typeL11n = new BaseStringL11n(); - $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->ref = $request->getDataInt('ref') ?? 0; $typeL11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language; - $typeL11n->content = $request->getDataString('title') ?? ''; + $typeL11n->content = $request->getDataString('content') ?? ''; return $typeL11n; } @@ -185,8 +185,8 @@ final class ApiController extends Controller private function validateExpenseTypeL11nCreate(RequestAbstract $request) : array { $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['type'] = !$request->hasData('type')) + if (($val['content'] = !$request->hasData('content')) + || ($val['ref'] = !$request->hasData('ref')) ) { return $val; } @@ -236,7 +236,7 @@ final class ApiController extends Controller $type = new BaseStringL11nType(); $type->title = $request->getDataString('name') ?? ''; $type->setL11n( - $request->getDataString('title') ?? '', + $request->getDataString('content') ?? '', ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? ISO639x1Enum::_EN ); @@ -256,7 +256,7 @@ final class ApiController extends Controller { $val = []; if (($val['name'] = !$request->hasData('name')) - || ($val['title'] = !$request->hasData('title')) + || ($val['content'] = !$request->hasData('content')) ) { return $val; } @@ -303,9 +303,9 @@ final class ApiController extends Controller private function createExpenseElementTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n { $typeL11n = new BaseStringL11n(); - $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->ref = $request->getDataInt('ref') ?? 0; $typeL11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language; - $typeL11n->content = $request->getDataString('title') ?? ''; + $typeL11n->content = $request->getDataString('content') ?? ''; return $typeL11n; } @@ -322,8 +322,8 @@ final class ApiController extends Controller private function validateExpenseElementTypeL11nCreate(RequestAbstract $request) : array { $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['type'] = !$request->hasData('type')) + if (($val['content'] = !$request->hasData('content')) + || ($val['ref'] = !$request->hasData('ref')) ) { return $val; } @@ -622,7 +622,7 @@ final class ApiController extends Controller { $val = []; if (($val['media'] = (!$request->hasData('media') && empty($request->files))) - || ($val['expense'] = !$request->hasData('expense')) + || ($val['ref'] = !$request->hasData('ref')) ) { return $val; } @@ -653,10 +653,10 @@ final class ApiController extends Controller } /** @var \Modules\BusinessExpenses\Models\Expense $expense */ - $expense = ExpenseMapper::get()->where('id', (int) $request->getData('expense'))->execute(); + $expense = ExpenseMapper::get()->where('id', (int) $request->getData('ref'))->execute(); $path = $this->createExpenseDir($expense); - $element = (int) $request->getData('element'); + $element = (int) $request->getData('ref'); $uploaded = new NullCollection(); if (!empty($request->files)) { @@ -758,7 +758,7 @@ final class ApiController extends Controller $val = []; if (($val['media'] = (!$request->hasData('media') && empty($request->files))) || ($val['expense'] = !$request->hasData('expense')) - || ($val['element'] = !$request->hasData('element')) + || ($val['ref'] = !$request->hasData('ref')) ) { return $val; } @@ -943,7 +943,7 @@ final class ApiController extends Controller return; } - $request->setData('virtualpath', '/Modules/BusinessExpenses/Items/' . $request->getData('id'), true); + $request->setData('virtualpath', '/Modules/BusinessExpenses/Items/' . $request->getData('ref'), true); $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); if ($response->header->status !== RequestStatusCode::R_200) { @@ -956,7 +956,7 @@ final class ApiController extends Controller } $model = $responseData['response']; - $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, ExpenseMapper::class, 'notes', '', $request->getOrigin()); + $this->createModelRelation($request->header->account, (int) $request->getData('ref'), $model->id, ExpenseMapper::class, 'notes', '', $request->getOrigin()); } /** @@ -971,7 +971,7 @@ final class ApiController extends Controller private function validateNoteCreate(RequestAbstract $request) : array { $val = []; - if (($val['id'] = !$request->hasData('id')) + if (($val['ref'] = !$request->hasData('ref')) ) { return $val; } @@ -998,7 +998,12 @@ final class ApiController extends Controller if (!$this->app->accountManager->get($accountId)->hasPermission( PermissionType::MODIFY, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::EXPENSE_NOTE, $request->getDataInt('id')) ) { - $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); + $this->fillJsonResponse( + $request, $response, + NotificationLevel::ERROR, '', + $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'InvalidPermission'), + [] + ); $response->header->status = RequestStatusCode::R_403; return; @@ -1026,7 +1031,12 @@ final class ApiController extends Controller if (!$this->app->accountManager->get($accountId)->hasPermission( PermissionType::DELETE, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::EXPENSE_NOTE, $request->getDataInt('id')) ) { - $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); + $this->fillJsonResponse( + $request, $response, + NotificationLevel::ERROR, '', + $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'InvalidPermission'), + [] + ); $response->header->status = RequestStatusCode::R_403; return; diff --git a/Theme/Backend/element-view.tpl.php b/Theme/Backend/element-view.tpl.php index 47b88b0..60cad07 100644 --- a/Theme/Backend/element-view.tpl.php +++ b/Theme/Backend/element-view.tpl.php @@ -100,7 +100,7 @@ echo $this->data['nav']->render(); ?>
- data['media-upload']->render('item-file', 'files', '', $element->files); ?> + data['media-upload']->render('item-file', 'files', '', $element->files, '{/api}businessexpenses/expense/element/file?csrf={$CSRF}', (string) $element->id); ?>