Overview

Namespaces

  • DSchoenbauer
    • Orm
      • Builder
      • Entity
      • Enum
      • Events
        • Persistence
        • Validate
          • DataType
          • Schema
      • Exception
      • Framework

Classes

  • DSchoenbauer\Orm\Builder\ModelDirector
  • DSchoenbauer\Orm\Builder\PdoModelBuilder
  • DSchoenbauer\Orm\CrudModel
  • DSchoenbauer\Orm\Entity\AbstractEntity
  • DSchoenbauer\Orm\Enum\ModelEvents
  • DSchoenbauer\Orm\Events\AbstractEvent
  • DSchoenbauer\Orm\Events\Persistence\PdoCreate
  • DSchoenbauer\Orm\Events\Persistence\PdoDelete
  • DSchoenbauer\Orm\Events\Persistence\PdoSelect
  • DSchoenbauer\Orm\Events\Persistence\PdoUpdate
  • DSchoenbauer\Orm\Events\Validate\AbstractValidate
  • DSchoenbauer\Orm\Events\Validate\DataType\AbstractDataType
  • DSchoenbauer\Orm\Events\Validate\DataType\DataTypeBoolean
  • DSchoenbauer\Orm\Events\Validate\DataType\DataTypeDate
  • DSchoenbauer\Orm\Events\Validate\DataType\DataTypeNumber
  • DSchoenbauer\Orm\Events\Validate\DataType\DataTypeString
  • DSchoenbauer\Orm\Events\Validate\Schema\DefaultValue
  • DSchoenbauer\Orm\Events\Validate\Schema\RequiredFields
  • DSchoenbauer\Orm\Events\Validate\Schema\ValidFields
  • DSchoenbauer\Orm\Exception\InvalidDataTypeException
  • DSchoenbauer\Orm\Exception\RequiredFieldMissingException
  • DSchoenbauer\Orm\Framework\Attribute
  • DSchoenbauer\Orm\Framework\AttributeCollection
  • DSchoenbauer\Orm\Model

Interfaces

  • DSchoenbauer\Orm\Builder\BuilderInterface
  • DSchoenbauer\Orm\Builder\DirectorInterface
  • DSchoenbauer\Orm\Entity\EntityInterface
  • DSchoenbauer\Orm\Entity\HasBoolFieldsInterface
  • DSchoenbauer\Orm\Entity\HasDateFieldsInterface
  • DSchoenbauer\Orm\Entity\HasDateWithCustomFormatInterface
  • DSchoenbauer\Orm\Entity\HasDefaultValuesInterface
  • DSchoenbauer\Orm\Entity\HasFilterInterface
  • DSchoenbauer\Orm\Entity\HasNumericFieldsInterface
  • DSchoenbauer\Orm\Entity\HasRequiredFieldsInterface
  • DSchoenbauer\Orm\Entity\HasStaticValuesInterface
  • DSchoenbauer\Orm\Entity\HasStringFieldsInterface
  • DSchoenbauer\Orm\Entity\IsSortableInterface
  • DSchoenbauer\Orm\Exception\OrmExceptionInterface
  • DSchoenbauer\Orm\VisitorInterface
  • Overview
  • Namespace
  • Class
  1: <?php
  2: /*
  3:  * The MIT License
  4:  *
  5:  * Copyright 2017 David Schoenbauer.
  6:  *
  7:  * Permission is hereby granted, free of charge, to any person obtaining a copy
  8:  * of this software and associated documentation files (the "Software"), to deal
  9:  * in the Software without restriction, including without limitation the rights
 10:  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 11:  * copies of the Software, and to permit persons to whom the Software is
 12:  * furnished to do so, subject to the following conditions:
 13:  *
 14:  * The above copyright notice and this permission notice shall be included in
 15:  * all copies or substantial portions of the Software.
 16:  *
 17:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 18:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 19:  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 20:  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 21:  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 22:  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 23:  * THE SOFTWARE.
 24:  */
 25: namespace DSchoenbauer\Orm\Events\Validate\DataType;
 26: 
 27: use DateTime;
 28: use DSchoenbauer\Orm\Entity\HasDateFieldsInterface;
 29: use DSchoenbauer\Orm\Entity\HasDateWithCustomFormatInterface;
 30: 
 31: /**
 32:  * Validates date fields are dates
 33:  *
 34:  * @author David Schoenbauer
 35:  */
 36: class DataTypeDate extends AbstractDataType
 37: {
 38: 
 39:     private $defaultDateTimeFormat;
 40:     private $customDateTimeFormats = [];
 41: 
 42:     /**
 43:      * returns the fields affected by the entity interface
 44:      * @param mixed $entity an entity object implements the getTypeInterface
 45:      * @return array an array of fields that are relevant to the interface
 46:      * @since v1.0.0
 47:      */
 48:     public function getFields($entity)
 49:     {
 50:         $this->setDefaultDateTimeFormat($entity->getDateDefaultFormat());
 51:         if ($entity instanceof HasDateWithCustomFormatInterface) {
 52:             $this->customDateTimeFormats = $entity->getDateCustomFormat();
 53:         }
 54:         return $entity->getDateFields();
 55:     }
 56: 
 57:     /**
 58:      * full name space of an interface that defines a given field type
 59:      * @return string
 60:      * @since v1.0.0
 61:      */
 62:     public function getTypeInterface()
 63:     {
 64:         return HasDateFieldsInterface::class;
 65:     }
 66: 
 67:     /**
 68:      * Validates that the value is of the proper type
 69:      * @param mixed $value value to DataType
 70:      * @param string $field field name
 71:      * @return boolean
 72:      * @since v1.0.0
 73:      */
 74:     public function validateValue($value, $field = null)
 75:     {
 76:         if ($value instanceof DateTime) {
 77:             return true;
 78:         }
 79: 
 80:         if (is_object($value)) {
 81:             return false;
 82:         }
 83:         $format = array_key_exists($field, $this->customDateTimeFormats) ?
 84:             $this->customDateTimeFormats[$field] : $this->getDefaultDateTimeFormat();
 85:         return DateTime::createFromFormat($format, $value) instanceof DateTime;
 86:     }
 87: 
 88:     /**
 89:      * provides a default Date Time String
 90:      * @return string
 91:      * @since v1.0.0
 92:      */
 93:     public function getDefaultDateTimeFormat()
 94:     {
 95:         return $this->defaultDateTimeFormat;
 96:     }
 97: 
 98:     /**
 99:      *
100:      * @param string $defaultDateTimeFormat a format used to translate to a date
101:      * @return $this
102:      * @since v1.0.0
103:      */
104:     public function setDefaultDateTimeFormat($defaultDateTimeFormat)
105:     {
106:         $this->defaultDateTimeFormat = $defaultDateTimeFormat;
107:         return $this;
108:     }
109: }
110: 
API documentation generated by ApiGen