From 39ed9367a6232460c9a83f10203abfa9855f9688 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Thu, 12 Oct 2023 22:49:20 +0000 Subject: [PATCH] todos fixed --- Controller/ApiAttributeTraitController.php | 27 +++++++++++++--------- Controller/ApiController.php | 6 +++-- Models/AttributeHolderTrait.php | 11 +++++++++ Models/AttributeType.php | 20 ++++++++++++++++ 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/Controller/ApiAttributeTraitController.php b/Controller/ApiAttributeTraitController.php index 8661888..fb0d5ab 100644 --- a/Controller/ApiAttributeTraitController.php +++ b/Controller/ApiAttributeTraitController.php @@ -53,21 +53,24 @@ trait ApiAttributeTraitController if ($request->hasData('value_id')) { $new->value = new NullAttributeValue((int) $request->getData('value_id')); } else { - // @todo: consider to check if custom value already exist and just reference the id? Problematic if content of id gets changed. $new->value = new AttributeValue(); $new->value->setValue($request->getData('value'), $new->type->datatype); } } else { - // @todo: fix by only accepting the value id to be used - // this is a workaround for now because the front end doesn't allow to dynamically show default values. - $value = new NullAttributeValue((int) $request->getData('value_id')); + if ($request->hasData('value_id')) { + if (!$new->type->hasDefaultId((int) $request->getData('value_id'))) { + return $new; + } - // Couldn't find matching default value - /* - if ($value->id === 0) { - return $new; + $value = new NullAttributeValue((int) $request->getData('value_id')); + } else { + $value = $new->type->getDefaultByValue($request->getData('value')); + + // Couldn't find matching default value + if ($value->id === 0) { + return $new; + } } - */ $new->value = $value; } @@ -283,13 +286,15 @@ trait ApiAttributeTraitController if ($request->hasData('value_id')) { $new->value = new NullAttributeValue((int) $request->getData('value_id')); } else { - // @todo: consider to check if custom value already exist and just reference the id? Problematic if content of id gets changed. $new->value = new AttributeValue(); $new->value->setValue($request->getData('value'), $new->type->datatype); } } else { if ($request->hasData('value_id')) { - // @todo: check if value_id part of default values + if (!$new->type->hasDefaultId((int) $request->getData('value_id'))) { + return $new; + } + $value = new NullAttributeValue((int) $request->getData('value_id')); } else { $value = $new->type->getDefaultByValue($request->getData('value')); diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 89e037a..3abb764 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -89,13 +89,15 @@ final class ApiController extends Controller if ($request->hasData('value_id')) { $new->value = new NullAttributeValue((int) $request->getData('value_id')); } else { - // @todo: consider to check if custom value already exist and just reference the id? Problematic if content of id gets changed. $new->value = new AttributeValue(); $new->value->setValue($request->getData('value'), $new->type->datatype); } } else { if ($request->hasData('value_id')) { - // @todo: check if value_id part of default values + if (!$new->type->hasDefaultId((int) $request->getData('value_id'))) { + return $new; + } + $value = new NullAttributeValue((int) $request->getData('value_id')); } else { $value = $new->type->getDefaultByValue($request->getData('value')); diff --git a/Models/AttributeHolderTrait.php b/Models/AttributeHolderTrait.php index a19aeb5..323b1c1 100755 --- a/Models/AttributeHolderTrait.php +++ b/Models/AttributeHolderTrait.php @@ -79,6 +79,17 @@ trait AttributeHolderTrait return false; } + public function hasAttributeType(string $attrName) : bool + { + foreach ($this->attributes as $attribute) { + if ($attribute->type->name === $attrName && !empty($attribute->value->getValue())) { + return true; + } + } + + return false; + } + /** * Get attribute * diff --git a/Models/AttributeType.php b/Models/AttributeType.php index 2aba906..05cb918 100755 --- a/Models/AttributeType.php +++ b/Models/AttributeType.php @@ -203,6 +203,26 @@ class AttributeType implements \JsonSerializable return $this->defaults; } + /** + * Check if an attribute type has a certain default id + * + * @param int $id Default object id + * + * @return bool + * + * @since 1.0.0 + */ + public function hasDefaultId(int $id) : bool + { + foreach ($this->defaults as $default) { + if ($default->id === $id) { + return true; + } + } + + return false; + } + /** * {@inheritdoc} */