diff --git a/Admin/Installer.php b/Admin/Installer.php index a1aa520..a0f7af3 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -133,8 +133,8 @@ final class Installer extends InstallerAbstract /** @var array $clientAttrType */ $clientAttrType = []; - /** @var \Modules\ClientManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('ClientManagement'); + /** @var \Modules\ClientManagement\Controller\ApiAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('ClientManagement', 'ApiAttribute'); /** @var array $attribute */ foreach ($attributes as $attribute) { @@ -199,8 +199,8 @@ final class Installer extends InstallerAbstract /** @var array $clientAttrValue */ $clientAttrValue = []; - /** @var \Modules\ClientManagement\Controller\ApiController $module */ - $module = $app->moduleManager->getModuleInstance('ClientManagement'); + /** @var \Modules\ClientManagement\Controller\ApiAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('ClientManagement', 'ApiAttribute'); foreach ($attributes as $attribute) { $clientAttrValue[$attribute['name']] = []; diff --git a/Controller/ApiAttributeController.php b/Controller/ApiAttributeController.php new file mode 100644 index 0000000..126af91 --- /dev/null +++ b/Controller/ApiAttributeController.php @@ -0,0 +1,523 @@ +validateAttributeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attribute = $this->createAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, ClientAttributeMapper::class, 'attribute', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attribute); + } + + /** + * Api method to create client attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, ClientAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to create client attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, ClientAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrType); + } + + /** + * Api method to create client attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\Attribute\Models\AttributeType $type */ + $type = ClientAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = $this->createAttributeValueFromRequest($request, $type); + $this->createModel($request->header->account, $attrValue, ClientAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + ClientAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->createStandardCreateResponse($request, $response, $attrValue); + } + + /** + * Api method to create client attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, ClientAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to update ClientAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var Attribute $old */ + $old = ClientAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateAttributeFromRequest($request, clone $old); + + if ($new->id === 0) { + // Set response header to invalid request because of invalid data + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $new); + + return; + } + + $this->updateModel($request->header->account, $old, $new, ClientAttributeMapper::class, 'client_attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue()) { + $this->updateModel($request->header->account, $old->value, $new->value, ClientAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete ClientAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + $clientAttribute = ClientAttributeMapper::get() + ->with('type') + ->where('id', (int) $request->getData('id')) + ->execute(); + + if ($clientAttribute->type->isRequired) { + $this->createInvalidDeleteResponse($request, $response, []); + + return; + } + + $this->deleteModel($request->header->account, $clientAttribute, ClientAttributeMapper::class, 'client_attribute', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $clientAttribute); + } + + /** + * Api method to update ClientAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = ClientAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, ClientAttributeTypeL11nMapper::class, 'client_attribute_type_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete ClientAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var \Modules\ClientManagement\Models\ClientAttributeTypeL11n $clientAttributeTypeL11n */ + $clientAttributeTypeL11n = ClientAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $clientAttributeTypeL11n, ClientAttributeTypeL11nMapper::class, 'client_attribute_type_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $clientAttributeTypeL11n); + } + + /** + * Api method to update ClientAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $old */ + $old = ClientAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, ClientAttributeTypeMapper::class, 'client_attribute_type', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete ClientAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @todo: implement + * + * @since 1.0.0 + */ + public function apiClientAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var \Modules\ClientManagement\Models\ClientAttributeType $clientAttributeType */ + $clientAttributeType = ClientAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $clientAttributeType, ClientAttributeTypeMapper::class, 'client_attribute_type', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $clientAttributeType); + } + + /** + * Api method to update ClientAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeValue $old */ + $old = ClientAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + + /** @var \Modules\Attribute\Models\Attribute $type */ + $attr = ClientAttributeMapper::get() + ->with('type') + ->where('id', $request->getDataInt('attribute') ?? 0) + ->execute(); + + $new = $this->updateAttributeValueFromRequest($request, clone $old, $attr); + + $this->updateModel($request->header->account, $old, $new, ClientAttributeValueMapper::class, 'client_attribute_value', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete ClientAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + return; + + // @todo: I don't think values can be deleted? Only Attributes + // However, It should be possible to remove UNUSED default values + // either here or other function? + if (!empty($val = $this->validateAttributeValueDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var \Modules\ClientManagement\Models\ClientAttributeValue $clientAttributeValue */ + $clientAttributeValue = ClientAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $clientAttributeValue, ClientAttributeValueMapper::class, 'client_attribute_value', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $clientAttributeValue); + } + + /** + * Api method to update ClientAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = ClientAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id')); + $new = $this->updateAttributeValueL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, ClientAttributeValueL11nMapper::class, 'client_attribute_value_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete ClientAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiClientAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var \Modules\ClientManagement\Models\ClientAttributeValueL11n $clientAttributeValueL11n */ + $clientAttributeValueL11n = ClientAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $clientAttributeValueL11n, ClientAttributeValueL11nMapper::class, 'client_attribute_value_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $clientAttributeValueL11n); + } +} diff --git a/Controller/ApiController.php b/Controller/ApiController.php index a78a8b9..0b30403 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -18,19 +18,10 @@ use Modules\Admin\Models\Account; use Modules\Admin\Models\Address; use Modules\Admin\Models\AddressMapper; use Modules\Admin\Models\NullAccount; -use Modules\Attribute\Models\Attribute; -use Modules\Attribute\Models\AttributeType; -use Modules\Attribute\Models\AttributeValue; -use Modules\Attribute\Models\NullAttributeType; -use Modules\Attribute\Models\NullAttributeValue; use Modules\Auditor\Models\Audit; use Modules\Auditor\Models\AuditMapper; +use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeMapper; use Modules\ClientManagement\Models\Client; -use Modules\ClientManagement\Models\ClientAttributeMapper; -use Modules\ClientManagement\Models\ClientAttributeTypeL11nMapper; -use Modules\ClientManagement\Models\ClientAttributeTypeMapper; -use Modules\ClientManagement\Models\ClientAttributeValueL11nMapper; -use Modules\ClientManagement\Models\ClientAttributeValueMapper; use Modules\ClientManagement\Models\ClientL11nMapper; use Modules\ClientManagement\Models\ClientL11nTypeMapper; use Modules\ClientManagement\Models\ClientMapper; @@ -43,7 +34,6 @@ use phpOMS\Localization\BaseStringL11n; use phpOMS\Localization\BaseStringL11nType; use phpOMS\Localization\ISO3166CharEnum; use phpOMS\Localization\ISO3166TwoEnum; -use phpOMS\Localization\ISO639x1Enum; use phpOMS\Localization\NullBaseStringL11nType; use phpOMS\Message\Http\HttpRequest; use phpOMS\Message\Http\HttpResponse; @@ -106,8 +96,8 @@ final class ApiController extends Controller public function apiClientCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateClientCreate($request))) { - $response->data['client_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } @@ -140,7 +130,7 @@ final class ApiController extends Controller $audit = new Audit( new NullAccount($request->header->account), null, - (string) $validate['status'], + (string) ($validate['status'] ?? ''), StringUtils::intHash(EUVATVies::class), 'vat_validation', self::NAME, @@ -164,11 +154,12 @@ final class ApiController extends Controller $internalResponse = new HttpResponse(); $internalRequest->header->account = $request->header->account; - $internalRequest->setData('client', $client->id); + $internalRequest->setData('ref', $client->id); $internalRequest->setData('type', $type->id); $internalRequest->setData('custom', $request->hasData('vat_id')); - $this->apiClientAttributeCreate($internalRequest, $internalResponse); + $this->app->moduleManager->get('ClientManagement', 'ApiAttribute') + ->apiClientAttributeCreate($internalRequest, $internalResponse); } } @@ -185,20 +176,22 @@ final class ApiController extends Controller ->where('name', 'sales_tax_code') ->execute(); - $value = $this->app->moduleManager->get('Billing', 'ApiTax')->getClientTaxCode($client, $unit->mainAddress); + $value = $this->app->moduleManager->get('Billing', 'ApiTax') + ->getClientTaxCode($client, $unit->mainAddress); $internalRequest = new HttpRequest(new HttpUri('')); $internalResponse = new HttpResponse(); $internalRequest->header->account = $request->header->account; - $internalRequest->setData('client', $client->id); + $internalRequest->setData('ref', $client->id); $internalRequest->setData('type', $type->id); $internalRequest->setData('value', $value->id); - $this->apiClientAttributeCreate($internalRequest, $internalResponse); + $this->app->moduleManager->get('ClientManagement', 'ApiAttribute') + ->apiClientAttributeCreate($internalRequest, $internalResponse); } - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Client', 'Client successfully created', $client); + $this->createStandardCreateResponse($request, $response, $client); } /** @@ -310,15 +303,7 @@ final class ApiController extends Controller $new = $this->updateMainAddressFromRequest($request, clone $old); $this->updateModel($request->header->account, $old, $new, AddressMapper::class, 'address', $request->getOrigin()); - - $this->fillJsonResponse( - $request, - $response, - NotificationLevel::OK, - '', - $this->app->l11nManager->getText($response->header->l11n->language, '0', '0', 'SuccessfulUpdate'), - $new - ); + $this->createStandardUpdateResponse($request, $response, $new); } /** @@ -378,15 +363,15 @@ final class ApiController extends Controller public function apiClientL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateClientL11nCreate($request))) { - $response->data['client_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $clientL11n = $this->createClientL11nFromRequest($request); $this->createModel($request->header->account, $clientL11n, ClientL11nMapper::class, 'client_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $clientL11n); + $this->createStandardCreateResponse($request, $response, $clientL11n); } /** @@ -449,15 +434,15 @@ final class ApiController extends Controller public function apiClientL11nTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void { if (!empty($val = $this->validateClientL11nTypeCreate($request))) { - $response->data['client_l11n_type_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); return; } $clientL11nType = $this->createClientL11nTypeFromRequest($request); $this->createModel($request->header->account, $clientL11nType, ClientL11nTypeMapper::class, 'client_l11n_type', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization type', 'Localization type successfully created', $clientL11nType); + $this->createStandardCreateResponse($request, $response, $clientL11nType); } /** @@ -473,7 +458,7 @@ final class ApiController extends Controller { $clientL11nType = new BaseStringL11nType(); $clientL11nType->title = $request->getDataString('title') ?? ''; - $clientL11nType->isRequired = (bool) ($request->getData('is_required') ?? false); + $clientL11nType->isRequired = $request->getDataBool('is_required') ?? false; return $clientL11nType; } @@ -497,378 +482,6 @@ final class ApiController extends Controller return []; } - /** - * Api method to create client attribute - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiClientAttributeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateClientAttributeCreate($request))) { - $response->data['attribute_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attribute = $this->createClientAttributeFromRequest($request); - $this->createModel($request->header->account, $attribute, ClientAttributeMapper::class, 'attribute', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); - } - - /** - * Method to create client attribute from request. - * - * @param RequestAbstract $request Request - * - * @return Attribute - * - * @since 1.0.0 - */ - private function createClientAttributeFromRequest(RequestAbstract $request) : Attribute - { - $attribute = new Attribute(); - $attribute->ref = (int) $request->getData('client'); - $attribute->type = new NullAttributeType((int) $request->getData('type')); - - if ($request->hasData('value')) { - $attribute->value = new NullAttributeValue((int) $request->getData('value')); - } else { - $newRequest = clone $request; - $newRequest->setData('value', $request->getData('custom'), true); - - $value = $this->createClientAttributeValueFromRequest($newRequest); - - $attribute->value = $value; - } - - return $attribute; - } - - /** - * Validate client attribute create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateClientAttributeCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['type'] = !$request->hasData('type')) - || ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom'))) - || ($val['client'] = !$request->hasData('client')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create client attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiClientAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateClientAttributeTypeL11nCreate($request))) { - $response->data['attr_type_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrL11n = $this->createClientAttributeTypeL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, ClientAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); - } - - /** - * Method to create client attribute l11n from request. - * - * @param RequestAbstract $request Request - * - * @return BaseStringL11n - * - * @since 1.0.0 - */ - private function createClientAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n - { - $attrL11n = new BaseStringL11n(); - $attrL11n->ref = $request->getDataInt('type') ?? 0; - $attrL11n->setLanguage( - $request->getDataString('language') ?? $request->header->l11n->language - ); - $attrL11n->content = $request->getDataString('title') ?? ''; - - return $attrL11n; - } - - /** - * Validate client attribute l11n create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateClientAttributeTypeL11nCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['type'] = !$request->hasData('type')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create client attribute type - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiClientAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateClientAttributeTypeCreate($request))) { - $response->data['attr_type_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrType = $this->createClientAttributeTypeFromRequest($request); - $this->createModel($request->header->account, $attrType, ClientAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); - } - - /** - * Method to create client attribute from request. - * - * @param RequestAbstract $request Request - * - * @return AttributeType - * - * @since 1.0.0 - */ - private function createClientAttributeTypeFromRequest(RequestAbstract $request) : AttributeType - { - $attrType = new AttributeType($request->getDataString('name') ?? ''); - $attrType->datatype = $request->getDataInt('datatype') ?? 0; - $attrType->custom = $request->getDataBool('custom') ?? false; - $attrType->isRequired = (bool) ($request->getData('is_required') ?? false); - $attrType->validationPattern = $request->getDataString('validation_pattern') ?? ''; - $attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); - $attrType->setFields($request->getDataInt('fields') ?? 0); - - return $attrType; - } - - /** - * Validate client attribute create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateClientAttributeTypeCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['name'] = !$request->hasData('name')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create client attribute value - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiClientAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateClientAttributeValueCreate($request))) { - $response->data['attr_value_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrValue = $this->createClientAttributeValueFromRequest($request); - $this->createModel($request->header->account, $attrValue, ClientAttributeValueMapper::class, 'attr_value', $request->getOrigin()); - - if ($attrValue->isDefault) { - $this->createModelRelation( - $request->header->account, - (int) $request->getData('type'), - $attrValue->id, - ClientAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() - ); - } - - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); - } - - /** - * Method to create client attribute value from request. - * - * @param RequestAbstract $request Request - * - * @return AttributeValue - * - * @since 1.0.0 - */ - private function createClientAttributeValueFromRequest(RequestAbstract $request) : AttributeValue - { - /** @var AttributeType $type */ - $type = ClientAttributeTypeMapper::get() - ->where('id', $request->getDataInt('type') ?? 0) - ->execute(); - - $attrValue = new AttributeValue(); - $attrValue->isDefault = $request->getDataBool('default') ?? false; - $attrValue->setValue($request->getData('value'), $type->datatype); - - if ($request->hasData('title')) { - $attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); - } - - return $attrValue; - } - - /** - * Validate client attribute value create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateClientAttributeValueCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['type'] = !$request->hasData('type')) - || ($val['value'] = !$request->hasData('value')) - ) { - return $val; - } - - return []; - } - - /** - * Api method to create client attribute l11n - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiClientAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void - { - if (!empty($val = $this->validateClientAttributeValueL11nCreate($request))) { - $response->data['attr_value_l11n_create'] = new FormValidation($val); - $response->header->status = RequestStatusCode::R_400; - - return; - } - - $attrL11n = $this->createClientAttributeValueL11nFromRequest($request); - $this->createModel($request->header->account, $attrL11n, ClientAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); - } - - /** - * Method to create Client attribute l11n from request. - * - * @param RequestAbstract $request Request - * - * @return BaseStringL11n - * - * @since 1.0.0 - */ - private function createClientAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n - { - $attrL11n = new BaseStringL11n(); - $attrL11n->ref = $request->getDataInt('value') ?? 0; - $attrL11n->setLanguage( - $request->getDataString('language') ?? $request->header->l11n->language - ); - $attrL11n->content = $request->getDataString('title') ?? ''; - - return $attrL11n; - } - - /** - * Validate Client attribute l11n create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateClientAttributeValueL11nCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['title'] = !$request->hasData('title')) - || ($val['value'] = !$request->hasData('value')) - ) { - return $val; - } - - return []; - } - /** * Api method to create client files * @@ -924,7 +537,7 @@ final class ApiController extends Controller ClientMapper::class, 'files', '', $request->getOrigin() ); - $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'File', 'File successfully updated', $uploaded); + $this->createStandardCreateResponse($request, $response, $uploaded); } /** @@ -953,4 +566,42 @@ final class ApiController extends Controller $model = $responseData['response']; $this->createModelRelation($request->header->account, $request->getData('id'), $model->id, ClientMapper::class, 'notes', '', $request->getOrigin()); } + + /** + * Api method to update Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocUpdate($request, $response, $data); + } + + /** + * Api method to delete Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocDelete($request, $response, $data); + } } diff --git a/Models/ClientAttributeMapper.php b/Models/Attribute/ClientAttributeMapper.php old mode 100755 new mode 100644 similarity index 93% rename from Models/ClientAttributeMapper.php rename to Models/Attribute/ClientAttributeMapper.php index 46cdd3b..7315fec --- a/Models/ClientAttributeMapper.php +++ b/Models/Attribute/ClientAttributeMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\ClientManagement\Models; +namespace Modules\ClientManagement\Models\Attribute; use Modules\Attribute\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Client mapper class. * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/ClientAttributeTypeL11nMapper.php b/Models/Attribute/ClientAttributeTypeL11nMapper.php old mode 100755 new mode 100644 similarity index 91% rename from Models/ClientAttributeTypeL11nMapper.php rename to Models/Attribute/ClientAttributeTypeL11nMapper.php index 19f0524..ce2cd4f --- a/Models/ClientAttributeTypeL11nMapper.php +++ b/Models/Attribute/ClientAttributeTypeL11nMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\ClientManagement\Models; +namespace Modules\ClientManagement\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\Localization\BaseStringL11n; @@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n; /** * Client mapper class. * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/ClientAttributeTypeMapper.php b/Models/Attribute/ClientAttributeTypeMapper.php old mode 100755 new mode 100644 similarity index 94% rename from Models/ClientAttributeTypeMapper.php rename to Models/Attribute/ClientAttributeTypeMapper.php index 4f1758d..b73ab9f --- a/Models/ClientAttributeTypeMapper.php +++ b/Models/Attribute/ClientAttributeTypeMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\ClientManagement\Models; +namespace Modules\ClientManagement\Models\Attribute; use Modules\Attribute\Models\AttributeType; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Client mapper class. * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/ClientAttributeValueL11nMapper.php b/Models/Attribute/ClientAttributeValueL11nMapper.php old mode 100755 new mode 100644 similarity index 91% rename from Models/ClientAttributeValueL11nMapper.php rename to Models/Attribute/ClientAttributeValueL11nMapper.php index fef3a0b..747712a --- a/Models/ClientAttributeValueL11nMapper.php +++ b/Models/Attribute/ClientAttributeValueL11nMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\ClientManagement\Models; +namespace Modules\ClientManagement\Models\Attribute; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; use phpOMS\Localization\BaseStringL11n; @@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n; /** * Client mapper class. * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/ClientAttributeValueMapper.php b/Models/Attribute/ClientAttributeValueMapper.php old mode 100755 new mode 100644 similarity index 94% rename from Models/ClientAttributeValueMapper.php rename to Models/Attribute/ClientAttributeValueMapper.php index eef353a..ec0273e --- a/Models/ClientAttributeValueMapper.php +++ b/Models/Attribute/ClientAttributeValueMapper.php @@ -4,7 +4,7 @@ * * PHP Version 8.1 * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @copyright Dennis Eichhorn * @license OMS License 2.0 * @version 1.0.0 @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\ClientManagement\Models; +namespace Modules\ClientManagement\Models\Attribute; use Modules\Attribute\Models\AttributeValue; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; @@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Client mapper class. * - * @package Modules\ClientManagement\Models + * @package Modules\ClientManagement\Models\Attribute * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 diff --git a/Models/ClientMapper.php b/Models/ClientMapper.php index 5226163..3e61117 100755 --- a/Models/ClientMapper.php +++ b/Models/ClientMapper.php @@ -16,6 +16,7 @@ namespace Modules\ClientManagement\Models; use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AddressMapper; +use Modules\ClientManagement\Models\Attribute\ClientAttributeMapper; use Modules\Editor\Models\EditorDocMapper; use Modules\Media\Models\MediaMapper; use Modules\Payment\Models\PaymentMapper;