diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 9dfd230..ff661aa 100644 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -200,6 +200,32 @@ } } }, + "itemmgmt_item_attr_default": { + "name": "itemmgmt_item_attr_default", + "fields": { + "itemmgmt_item_attr_default_id": { + "name": "itemmgmt_item_attr_default_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "itemmgmt_item_attr_default_type": { + "name": "itemmgmt_item_attr_default_type", + "type": "INT(11)", + "null": false, + "foreignTable": "itemmgmt_attr_type", + "foreignKey": "itemmgmt_attr_type_id" + }, + "itemmgmt_item_attr_default_value": { + "name": "itemmgmt_item_attr_default_value", + "type": "INT(11)", + "null": false, + "foreignTable": "itemmgmt_attr_value", + "foreignKey": "itemmgmt_attr_value_id" + } + } + }, "itemmgmt_item_attr": { "name": "itemmgmt_item_attr", "fields": { diff --git a/Admin/Installer.php b/Admin/Installer.php index 8e84fde..8e6f57a 100644 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -79,52 +79,95 @@ final class Installer extends InstallerAbstract { $itemAttrValue = []; - $id = $itemAttrType['color']->getId(); $itemAttrValue['color'] = []; - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Red', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][0]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Rot', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][1]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Blue', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][2]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Blau', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][3]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Green', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][4]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Grün', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][5]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Yellow', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][6]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Gelb', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][7]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'White', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][8]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Weiss', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][9]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Black', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][10]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Schwarz', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][11]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Braun', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][12]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Braun', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][13]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Purple', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][14]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Lila', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][15]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Pink', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][16]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Rosa', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][17]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Orange', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][18]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Orange', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][19]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Grey', ISO639x1Enum::_EN); - ItemAttributeValueMapper::create($itemAttrValue['color'][20]); - $itemAttrValue['color'][] = new ItemAttributeValue($id, 'Grau', ISO639x1Enum::_DE); - ItemAttributeValueMapper::create($itemAttrValue['color'][21]); + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Red', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][0]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Rot', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][1]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Blue', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][2]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Blau', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][3]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Green', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][4]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Grün', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][5]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Yellow', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][6]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Gelb', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][7]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'White', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][8]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Weiss', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][9]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Black', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][10]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Schwarz', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][11]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Braun', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][12]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Braun', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][13]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Purple', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][14]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Lila', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][15]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Pink', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][16]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Rosa', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][17]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Orange', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][18]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Orange', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][19]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Grey', ISO639x1Enum::_EN); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][20]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + + $itemAttrValue['color'][] = new ItemAttributeValue(AttributeValueType::_STRING, 'Grau', ISO639x1Enum::_DE); + $id = ItemAttributeValueMapper::create($itemAttrValue['color'][21]); + ItemAttributeTypeMapper::createRelation('defaults', $itemAttrType['color']->getId(), $id); + return $itemAttrValue; } diff --git a/Controller/ApiController.php b/Controller/ApiController.php new file mode 100644 index 0000000..a238882 --- /dev/null +++ b/Controller/ApiController.php @@ -0,0 +1,594 @@ +validateItemCreate($request))) { + $response->set('item_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $item = $this->createItemFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $item, ItemMapper::class, 'item', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Item', 'Item successfully created', $item); + } + + /** + * Method to create item from request. + * + * @param RequestAbstract $request Request + * + * @return Item + * + * @since 1.0.0 + */ + private function createItemFromRequest(RequestAbstract $request) : Item + { + $item = new Item(); + $item->setNumber($request->getData('number') ?? ''); + + return $item; + } + + /** + * Validate item create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['number'] = empty($request->getData('number')))) { + return $val; + } + + return []; + } + + /** + * Api method to create item attribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemAttributeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemAttributeCreate($request))) { + $response->set('attribute_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $attribute = $this->createItemAttributeFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $attribute, ItemAttributeMapper::class, 'attribute', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); + } + + /** + * Method to create item attribute from request. + * + * @param RequestAbstract $request Request + * + * @return ItemAttribute + * + * @since 1.0.0 + */ + private function createItemAttributeFromRequest(RequestAbstract $request) : ItemAttribute + { + $attribute = new ItemAttribute(); + $attribute->setItem((int) $request->getData('item')); + $attribute->setType((int) $request->getData('type')); + $attribute->setValue((int) $request->getData('value')); + + return $attribute; + } + + /** + * Validate item attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemAttributeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = empty($request->getData('type'))) + || ($val['value'] = empty($request->getData('value'))) + || ($val['item'] = empty($request->getData('item'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemAttributeTypeL11nCreate($request))) { + $response->set('attr_type_l11n_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $attrL11n = $this->createItemAttributeTypeL11nFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $attrL11n, ItemAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type localization', 'Attribute type localization successfully created', $attrL11n); + } + + /** + * Method to create item attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return ItemAttributeTypeL11n + * + * @since 1.0.0 + */ + private function createItemAttributeTypeL11nFromRequest(RequestAbstract $request) : ItemAttributeTypeL11n + { + $attrL11n = new ItemAttributeTypeL11n(); + $attrL11n->setType((int) ($request->getData('type') ?? 0)); + $attrL11n->setLanguage((string) ( + $request->getData('language') ?? $request->getLanguage() + )); + $attrL11n->setTitle((string) ($request->getData('title') ?? '')); + + return $attrL11n; + } + + /** + * Validate item attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemAttributeTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['type'] = empty($request->getData('type'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemAttributeTypeCreate($request))) { + $response->set('attr_type_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $attrType = $this->createItemAttributeTypeFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $attrType, ItemAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + + $l11nRequest = new HttpRequest($request->getUri()); + $l11nRequest->setData('type', $attrType->getId()); + $l11nRequest->setData('title', $request->getData('title')); + $l11nRequest->setData('language', $request->getData('language')); + + $l11nAttributeType = $this->createItemAttributeTypeL11nFromRequest($l11nRequest); + $this->createModel($request->getHeader()->getAccount(), $l11nAttributeType, TagL11nMapper::class, 'attr_type_l11n_create', $request->getOrigin()); + + $attrType->setL11n($l11nAttributeType); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); + } + + /** + * Method to create item attribute from request. + * + * @param RequestAbstract $request Request + * + * @return ItemAttributeType + * + * @since 1.0.0 + */ + private function createItemAttributeTypeFromRequest(RequestAbstract $request) : ItemAttributeType + { + $attrType = new ItemAttributeType(); + $attrType->setName((string) ($request->getData('name') ?? '')); + $attrType->setFields((int) ($request->getData('fields') ?? 0)); + $attrType->setCustom((bool) ($request->getData('custom') ?? false)); + + return $attrType; + } + + /** + * Validate item attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemAttributeTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = empty($request->getData('name'))) + || ($val['l11n'] = empty($request->getData('l11n'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemAttributeValueCreate($request))) { + $response->set('attr_value_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $attrValue = $this->createItemAttributeValueFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $attrValue, ItemAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault()) { + $this->createModelRelation( + $request->getHeader()->getAccount(), + (int) $request->getData('attributetype'), + $attrValue->getId(), + ItemAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); + } + + /** + * Method to create item attribute value from request. + * + * @param RequestAbstract $request Request + * + * @return ItemAttributeValue + * + * @since 1.0.0 + */ + private function createItemAttributeValueFromRequest(RequestAbstract $request) : ItemAttributeValue + { + $attrValue = new ItemAttributeValue(); + + $type = $request->getData('type') ?? 0; + if ($type === AttributeValueType::_INT) { + $attrValue->setValueInt((int) $request->getData('value')); + } elseif ($type === AttributeValueType::_STRING) { + $attrValue->setValueString((string) $request->getData('value')); + } elseif ($type === AttributeValueType::_FLOAT) { + $attrValue->setValueDecimal((float) $request->getData('value')); + } elseif ($type === AttributeValueType::_DATETIME) { + $attrValue->setValueDat(new \DateTime($request->getData('value') ?? '')); + } + + $attrValue->setDefault((bool) ($request->getData('default') ?? false)); + + if ($request->hasData('language')) { + $attrValue->setLanguage((string) ($request->getData('language') ?? $request->getLanguage())); + } + + if ($request->hasData('country')) { + $attrValue->setCountry((string) ($request->getData('country') ?? $request->getHeader()->getL11n()->getCountry())); + } + + return $attrValue; + } + + /** + * Validate item attribute value create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemAttributeValueCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = empty($request->getData('type'))) + || ($val['value'] = empty($request->getData('value'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item l11n type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemL11nTypeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemL11nTypeCreate($request))) { + $response->set('item_l11n_type_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $itemL11nType = $this->createItemL11nTypeFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $itemL11nType, ItemL11nTypeMapper::class, 'item_l11n_type', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Item localization type', 'Item localization type successfully created', $itemL11nType); + } + + /** + * Method to create item l11n type from request. + * + * @param RequestAbstract $request Request + * + * @return ItemL11nType + * + * @since 1.0.0 + */ + private function createItemL11nTypeFromRequest(RequestAbstract $request) : ItemL11nType + { + $itemL11nType = new ItemL11nType(); + $itemL11nType->setTitle((string) ($request->getData('title') ?? '')); + + return $itemL11nType; + } + + /** + * Validate item l11n type create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemL11nTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title')))) { + return $val; + } + + return []; + } + + /** + * Api method to create item l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiItemL11nCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + if (!empty($val = $this->validateItemL11nCreate($request))) { + $response->set('item_l11n_create', new FormValidation($val)); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $itemL11n = $this->createItemL11nFromRequest($request); + $this->createModel($request->getHeader()->getAccount(), $itemL11n, ItemL11nMapper::class, 'item_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Item localization', 'Item localization successfully created', $itemL11n); + } + + /** + * Method to create item l11n from request. + * + * @param RequestAbstract $request Request + * + * @return ItemL11n + * + * @since 1.0.0 + */ + private function createItemL11nFromRequest(RequestAbstract $request) : ItemL11n + { + $itemL11n = new ItemL11n(); + $itemL11n->setItem((int) ($request->getData('item') ?? 0)); + $itemL11n->setType((int) ($request->getData('type') ?? 0)); + $itemL11n->setLanguage((string) ( + $request->getData('language') ?? $request->getLanguage() + )); + $itemL11n->setDescription((string) ($request->getData('description') ?? '')); + + return $itemL11n; + } + + /** + * Validate item l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateItemL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['item'] = empty($request->getData('item'))) + || ($val['type'] = empty($request->getData('type'))) + || ($val['description'] = empty($request->getData('description'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item files + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiFileCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $uploadedFiles = $request->getFiles() ?? []; + + if (empty($uploadedFiles)) { + $this->fillJsonResponse($request, $response, NotificationLevel::ERROR, 'Item', 'Invalid item image', $uploadedFiles); + $response->getHeader()->setStatusCode(RequestStatusCode::R_400); + + return; + } + + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + $request->getData('name') ?? '', + $uploadedFiles, + $request->getHeader()->getAccount(), + 'Modules/Media/Files/Modules/ItemManagement/' . ($request->getData('item') ?? '0'), + '/Modules/ItemManagement/' . ($request->getData('item') ?? '0'), + $request->getData('type') ?? '', + '', + '', + PathSettings::FILE_PATH + ); + + $this->createModelRelation( + $request->getHeader()->getAccount(), + (int) $request->getData('item'), + \reset($uploaded)->getId(), + ItemMapper::class, 'files', '', $request->getOrigin() + ); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Image', 'Image successfully updated', $uploaded); + } +} diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 52993dd..26cd8d1 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -50,7 +50,7 @@ final class BackendController extends Controller $view->setTemplate('/Modules/ItemManagement/Theme/Backend/sales-item-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004805001, $request, $response)); - $items = ItemMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())::getAll(); + $items = ItemMapper::withConditional('language', $response->getLanguage())::getAll(); $view->addData('items', $items); return $view; diff --git a/Docs/Dev/img/uml.draw.svg b/Docs/Dev/img/uml.draw.svg new file mode 100644 index 0000000..e69de29 diff --git a/Models/AttributeValueType.php b/Models/AttributeValueType.php new file mode 100644 index 0000000..f0336f4 --- /dev/null +++ b/Models/AttributeValueType.php @@ -0,0 +1,36 @@ +id; } + /** + * Set type + * + * @param int|ItemAttributeType $type Type + * + * @return void + * + * @since 1.0.0 + */ + public function setType($type) : void + { + $this->type = $type; + } + + /** + * Set value + * + * @param int|ItemAttributeValue $type Type + * + * @return void + * + * @since 1.0.0 + */ + public function setValue($value) : void + { + $this->value = $value; + } + /** * {@inheritdoc} */ diff --git a/Models/ItemAttributeType.php b/Models/ItemAttributeType.php index 5d54faa..b051180 100644 --- a/Models/ItemAttributeType.php +++ b/Models/ItemAttributeType.php @@ -65,6 +65,13 @@ class ItemAttributeType implements \JsonSerializable, ArrayableInterface */ protected $l11n = 0; + /** + * Possible default attribute values + * + * @var array + */ + protected array $defaults = []; + /** * Constructor. * @@ -89,6 +96,71 @@ class ItemAttributeType implements \JsonSerializable, ArrayableInterface return $this->id; } + /** + * Set name + * + * @param string $name Name + * + * @return void + * + * @since 1.0.0 + */ + public function setName(string $name) : void + { + $this->name = $name; + } + + /** + * Set l11n + * + * @param string|ItemAttributeTypeL11n $l11n Tag article l11n + * @param string $lang Language + * + * @return void + * + * @since 1.0.0 + */ + public function setL11n($l11n, string $lang = ISO639x1Enum::_EN) : void + { + if ($l11n instanceof ItemAttributeTypeL11n) { + $this->l11n = $l11n; + } elseif ($this->l11n instanceof ItemAttributeTypeL11n && \is_string($l11n)) { + $this->l11n->setl11n($l11n); + } elseif (\is_string($l11n)) { + $this->l11n = new ItemAttributeTypeL11n(); + $this->l11n->setl11n($l11n); + $this->l11n->setLanguage($lang); + } + } + + /** + * Set fields + * + * @param int $fields Fields + * + * @return void + * + * @since 1.0.0 + */ + public function setFields(int $fields) : void + { + $this->fields = $fields; + } + + /** + * Set custom + * + * @param bool $custom FieldsCustom + * + * @return void + * + * @since 1.0.0 + */ + public function setCustom(bool $custom) : void + { + $this->custom = $custom; + } + /** * {@inheritdoc} */ diff --git a/Models/ItemAttributeTypeL11n.php b/Models/ItemAttributeTypeL11n.php index 00b0884..28ff05b 100644 --- a/Models/ItemAttributeTypeL11n.php +++ b/Models/ItemAttributeTypeL11n.php @@ -111,6 +111,34 @@ class ItemAttributeTypeL11n implements \JsonSerializable, ArrayableInterface return $this->title; } + /** + * Set type. + * + * @param int $type Type id + * + * @return void + * + * @since 1.0.0 + */ + public function setType(int $type) : void + { + $this->type = $type; + } + + /** + * Set language + * + * @param string $language Language + * + * @return void + * + * @since 1.0.0 + */ + public function setLanguage(string $language) : void + { + $this->language = $language; + } + /** * Set title * diff --git a/Models/ItemAttributeTypeMapper.php b/Models/ItemAttributeTypeMapper.php index 212a826..1f55d2b 100644 --- a/Models/ItemAttributeTypeMapper.php +++ b/Models/ItemAttributeTypeMapper.php @@ -54,6 +54,12 @@ final class ItemAttributeTypeMapper extends DataMapperAbstract 'conditional' => true, 'external' => null, ], + 'defaults' => [ + 'mapper' => ItemAttributeValueMapper::class, + 'table' => 'itemmgmt_item_attr_default', + 'self' => 'itemmgmt_item_attr_default_type', + 'external' => 'itemmgmt_item_attr_default_value', + ], ]; /** diff --git a/Models/ItemAttributeValue.php b/Models/ItemAttributeValue.php index 306456c..18e13aa 100644 --- a/Models/ItemAttributeValue.php +++ b/Models/ItemAttributeValue.php @@ -21,6 +21,8 @@ use phpOMS\Localization\ISO639x1Enum; /** * Item attribute value class. * + * The relation with the type/item is defined in the ItemAttribute class. + * * @package Modules\ItemManagement\Models * @license OMS License 1.0 * @link https://orange-management.org @@ -111,19 +113,10 @@ class ItemAttributeValue implements \JsonSerializable, ArrayableInterface */ public function __construct(int $type = 0, $value = '', string $language = ISO639x1Enum::_EN) { - $this->type = $type; - - if (\is_string($value)) { - $this->valueStr = $value; - } elseif (\is_int($value)) { - $this->valueInt = $value; - } elseif (\is_float($value)) { - $this->valueDec = $value; - } elseif ($value instanceof \DateTimeInterface) { - $this->valueDat = $value; - } - + $this->type = $type; $this->language = $language; + + $this->setValue($value); } /** @@ -138,6 +131,138 @@ class ItemAttributeValue implements \JsonSerializable, ArrayableInterface return $this->id; } + /** + * Set value + * + * @param int|string|float $value Value + * + * @return void + * + * @since 1.0.0 + */ + public function setValue($value) : void + { + if (\is_string($value)) { + $this->valueStr = $value; + } elseif (\is_int($value)) { + $this->valueInt = $value; + } elseif (\is_float($value)) { + $this->valueDec = $value; + } elseif ($value instanceof \DateTimeInterface) { + $this->valueDat = $value; + } + } + + /** + * Set value + * + * @param int $value Value + * + * @return void + * + * @since 1.0.0 + */ + public function setValueInt(int $value) : void + { + $this->valueInt = $value; + } + + /** + * Set value + * + * @param string $value Value + * + * @return void + * + * @since 1.0.0 + */ + public function setValueString(string $value) : void + { + $this->valueString = $value; + } + + /** + * Set value + * + * @param float $value Value + * + * @return void + * + * @since 1.0.0 + */ + public function setValueDecimal(float $value) : void + { + $this->valueDec = $value; + } + + /** + * Set value + * + * @param \DateTimeInterface $value Value + * + * @return void + * + * @since 1.0.0 + */ + public function setValueDat(\DateTimeInterface $value) : void + { + $this->valueDat = $value; + } + + /** + * Set default + * + * @param bool $isDefault Default + * + * @return void + * + * @since 1.0.0 + */ + public function setDefault(bool $isDefault) : void + { + $this->isDefault = $isDefault; + } + + /** + * Is default value? + * + * @return bool + * + * @since 1.0.0 + */ + public function isDefault() : bool + { + return $this->isDefault; + } + + /** + * Set language + * + * @param string $language Language + * + * @return void + * + * @since 1.0.0 + */ + public function setLanguage(string $language) : void + { + $this->language = $language; + } + + /** + * Set country + * + * @param string $country Country + * + * @return void + * + * @since 1.0.0 + */ + public function setCountry(string $country) : void + { + $this->country = $country; + } + /** * {@inheritdoc} */ diff --git a/Models/ItemL11nType.php b/Models/ItemL11nType.php index d29a4c8..6a8f7cf 100644 --- a/Models/ItemL11nType.php +++ b/Models/ItemL11nType.php @@ -35,7 +35,7 @@ class ItemL11nType implements \JsonSerializable, ArrayableInterface protected int $id = 0; /** - * Item title. + * Identifier for the l11n type. * * @var string * @since 1.0.0