Ejemplo n.º 1
0
 protected function fixValue(Mesour\Editable\Structures\Fields\IStructureField $elementField, $value)
 {
     if (is_null($value)) {
         return null;
     }
     if ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::TEXT) {
         return Strings::trim($value);
     } elseif ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::ENUM) {
         /** @var Mesour\Editable\Structures\Fields\EnumField $elementField */
         $values = $elementField->getValues();
         $isValueAllowed = isset($values[$value]);
         if ($elementField->isNullable() && !$value && !$isValueAllowed) {
             return null;
         }
         if (!$isValueAllowed) {
             throw new Mesour\OutOfRangeException(sprintf('Enum value %s does not exist on %s field.', $value, $elementField->getName()));
         }
         return $value;
     } elseif ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::NUMBER) {
         /** @var Mesour\Editable\Structures\Fields\NumberField $elementField */
         if (!$value && !is_numeric($value)) {
             if (!$elementField->isNullable()) {
                 return 0;
             }
             return null;
         }
         if (method_exists($elementField, 'getDecimals') && $elementField->getDecimals() === 0 || strpos($value, '.') === -1) {
             return (int) $value;
         }
         return (double) $value;
     } elseif ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::DATE) {
         /** @var Mesour\Editable\Structures\Fields\DateField $elementField */
         if (!$value && $elementField->isNullable()) {
             return null;
         } elseif ($value && !$value instanceof \DateTime) {
             try {
                 if (is_numeric($value)) {
                     $dateTime = new \DateTime();
                     $dateTime->setTimestamp($value);
                     return $dateTime;
                 }
                 return new \DateTime($value);
             } catch (\Exception $e) {
                 $exception = new Mesour\Editable\InvalidDateTimeException('Date is invalid');
                 $exception->setFieldName($elementField->getName());
                 throw $exception;
             }
         }
     } elseif ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::ONE_TO_ONE) {
         /** @var Mesour\Editable\Structures\Fields\OneToOneField $elementField */
         if (!$value && $elementField->isNullable()) {
             return null;
         }
     } elseif ($elementField->getType() === Mesour\Sources\Structures\Columns\IColumnStructure::BOOL) {
         /** @var Mesour\Editable\Structures\Fields\BoolField $elementField */
         if (Strings::length($value) === 0 && $elementField->isNullable()) {
             return null;
         }
         return !$value || $value === 'false' ? false : true;
     }
     return $value;
 }
Ejemplo n.º 2
0
 private function addField(Fields\IStructureField $field)
 {
     $this->fields[$field->getName()] = $field;
 }
Ejemplo n.º 3
0
 private static function checkDisabled(IStructureField $field)
 {
     if ($field->isDisabled()) {
         throw new Mesour\InvalidStateException(sprintf('Can not change data for disabled field `%s`.', $field->getName()));
     }
 }