<?php
 
/**
 
 * @package DATA
 
 */
 
 
/**
 
 * A concrete factory for inboxing string with mysql datetime format
 
 * into datetime objects.
 
 */
 
class DATA_MySQL5_SQLDatetimeFactory extends DATA_SQLTypeFactory {
 
    /**
 
     * Flags the type to nullable or not nullable.
 
     * @var boolean
 
     */
 
    private $nullable;
 
    
 
    /**
 
     * Constructor.
 
     * 
 
     * @param boolean $nullable True if the type is nullable.
 
     */
 
    public function __construct($nullable) {
 
        $this->nullable = $nullable;
 
    }
 
    
 
    /**
 
     * Inboxes a value.
 
     * 
 
     * Throws {@link DATA_InvalidDatetime}.
 
     * 
 
     * @param mixed $value The value.
 
     * @return DATA_SQLDatetime Inboxed value.
 
     */
 
    public function inbox($value) {
 
        if ($value instanceof DATA_SQLDatetime) {
 
            if ($this->nullable == $value->isNullable()) {
 
                return clone $value;
 
            }
 
        }
 
        if ($value instanceof DATA_SQLType) {
 
            $value = $value->outbox();
 
        }
 
        if ($value === null) {
 
            return new DATA_SQLDate($this->nullable);
 
        }
 
        if (!preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $value)) {
 
            throw new DATA_InvalidDatetime($value);
 
        }
 
        list($date, $time) = explode(' ', $value);
 
        list($year, $month, $day) = explode('-', $date);
 
        list($hour, $minutes, $seconds) = explode(':', $time);
 
        return new DATA_SQLDatetime($this->nullable, $year, $month, $day, $hour, $minutes, $seconds);
 
    }
 
}
 
?>
 
 
 |