Наследование: implements JsonSerializabl\JsonSerializable, use trait Webiny\Component\StdLib\StdLibTrait, use trait Webiny\Component\StdLib\FactoryLoaderTrait
Пример #1
0
 /**
  * @inheritDoc
  */
 public function validate(AbstractAttribute $attribute, $data, $params = [])
 {
     if (empty($data)) {
         return;
     }
     $query = [$attribute->attr() => $data];
     $id = $attribute->getParent()->id;
     if ($id) {
         $query['id'] = ['$ne' => $id];
     }
     $exists = call_user_func_array([$attribute->getParent(), 'findOne'], [$query]);
     if ($exists) {
         throw new ValidationException('A record with this attribute value already exists.');
     }
 }
Пример #2
0
 public function getValue($params = [], $asDateTimeObject = false)
 {
     if ($asDateTimeObject) {
         return $this->processGetValue(new DateTimeObject(parent::getValue()), $params);
     }
     return $this->processGetValue(parent::getValue(), $params);
 }
Пример #3
0
 public function getValue($params = [], $asDateTimeObject = false, $processCallbacks = true)
 {
     $value = parent::getValue([], false);
     if ($asDateTimeObject) {
         $value = new DateTimeObject($value);
     }
     return $this->processGetValue($value, $params, $processCallbacks);
 }
Пример #4
0
 /**
  * @inheritDoc
  */
 public function getDbValue()
 {
     $value = $this->getValue();
     if ($value instanceof AbstractEntity) {
         return $this->processToDbValue($value->id);
     }
     return parent::getDbValue();
 }
Пример #5
0
 /**
  * Perform validation against given value
  *
  * @param $value
  *
  * @throws ValidationException
  * @return $this
  */
 protected function validate(&$value)
 {
     if ($this->str($value)->contains(',')) {
         $value = $this->str($value)->replace(',', '.')->val();
     }
     $value = floatval($value);
     if (!$this->isNumber($value)) {
         $this->expected('number', gettype($value));
     }
     parent::validate($value);
     return $this;
 }
Пример #6
0
 /**
  * Perform validation against given value
  *
  * @param $value
  *
  * @throws ValidationException
  * @return $this
  */
 protected function validate(&$value)
 {
     if ($value instanceof AbstractEntity) {
         $value = $value->id;
     }
     if ($value != null && !$this->isString($value) && !$this->isNumber($value)) {
         $this->expected('string, number or AbstractEntity', gettype($value));
     }
     // Make sure it's a string even if it is a number (convert to numeric string)
     $value = '' . $value;
     parent::validate($value);
     return $this;
 }
Пример #7
0
 /**
  * Perform validation against given value
  *
  * @param $value
  *
  * @throws ValidationException
  * @return $this
  */
 protected function validate(&$value)
 {
     if ($this->isString($value) && $this->isNumber($value)) {
         if (!$this->str($value)->contains('.') && !$this->str($value)->contains(',')) {
             $value = intval($value);
         }
     }
     if (!$this->isInteger($value)) {
         $this->expected('integer', gettype($value));
     }
     parent::validate($value);
     return $this;
 }
Пример #8
0
 /**
  * Set attribute instance
  *
  * @param AbstractAttribute $attribute
  *
  * @return AbstractAttribute
  */
 public function smart(AbstractAttribute $attribute)
 {
     $attribute->setName($this->attribute)->setParent($this->entity);
     return $this->attributes[$this->attribute] = $attribute;
 }
Пример #9
0
 /**
  * Perform validation against given value
  *
  * @param $value
  *
  * @return $this
  * @throws ValidationException
  */
 protected function validate(&$value)
 {
     if ($this->isNull($value)) {
         return $this;
     }
     if (!$this->isArray($value) && !$this->isArrayObject($value)) {
         $this->expected('array or ArrayObject', gettype($value));
     }
     // Call parent method
     parent::validate($value);
     // Validate array keys
     $this->validateNestedKeys($value);
     return $this;
 }
Пример #10
0
 public function __construct($name = null, AbstractEntity $parent = null)
 {
     parent::__construct($name, $parent);
     $this->defaultValue = ['lat' => 0, 'lng' => 0];
 }
Пример #11
0
 /**
  * @param AbstractAttribute   $attribute
  * @param ValidationException $e
  *
  * @return AttributeValidationException
  */
 public function attributeValidationException(AbstractAttribute $attribute, ValidationException $e)
 {
     $attrException = new AttributeValidationException($e->getMessage());
     $attrException->addError($attribute->getName(), $e->getMessage());
     return $attrException;
 }
Пример #12
0
 private function populateAttribute($attributeName, AbstractAttribute $entityAttribute, $validation, $data, $fromDb)
 {
     // Skip population of protected attributes if data is not coming from DB
     if (!$fromDb && $entityAttribute->getSkipOnPopulate()) {
         return;
     }
     // Dynamic attributes from database should be populated without any checks, and skipped otherwise
     if ($this->isInstanceOf($entityAttribute, AttributeType::DYNAMIC) && isset($data[$attributeName])) {
         $entityAttribute->setValue($data[$attributeName], $fromDb);
         return;
     }
     /**
      * Check if attribute is required and it's value is set or maybe value was already assigned
      */
     if (!$fromDb && $entityAttribute->isRequired() && !isset($data[$attributeName]) && !$entityAttribute->hasValue()) {
         $message = $entityAttribute->getValidationMessages('required');
         if (!$message) {
             $message = ValidationException::REQUIRED;
         }
         $ex = new ValidationException(ValidationException::VALIDATION_FAILED);
         $ex->addError($attributeName, $message, []);
         $validation[$attributeName] = $ex;
         return;
     }
     /**
      * In case it is an update - if the attribute is not in new $data, it's no big deal, we already have the previous value.
      */
     $dataIsSet = array_key_exists($attributeName, $data);
     if (!$dataIsSet && $this->exists()) {
         return;
     }
     $canPopulate = !$this->exists() || $fromDb || !$entityAttribute->getOnce();
     if ($dataIsSet && $canPopulate) {
         $dataValue = $data[$attributeName];
         try {
             $entityAttribute->setValue($dataValue, $fromDb);
         } catch (ValidationException $e) {
             $validation[$attributeName] = $e;
         }
     }
 }
Пример #13
0
 public function toArray($params = [])
 {
     return $this->processToArrayValue(StdObjectWrapper::toBool(parent::toArray($params)));
 }