Jackalope\Transport\DoctrineDBAL\Client::mapPropertyFromElement PHP Method

mapPropertyFromElement() protected method

Map a property from the given property XML node to the given \stdClass node representation
protected mapPropertyFromElement ( DOMElement $propertyNode, stdClass $data )
$propertyNode DOMElement
$data stdClass
    protected function mapPropertyFromElement(\DOMElement $propertyNode, \stdClass $data)
    {
        $name = $propertyNode->getAttribute('sv:name');
        $values = array();
        $type = PropertyType::valueFromName($propertyNode->getAttribute('sv:type'));
        foreach ($propertyNode->childNodes as $valueNode) {
            switch ($type) {
                case PropertyType::NAME:
                case PropertyType::URI:
                case PropertyType::WEAKREFERENCE:
                case PropertyType::REFERENCE:
                case PropertyType::PATH:
                case PropertyType::DECIMAL:
                case PropertyType::STRING:
                    $values[] = $valueNode->nodeValue;
                    break;
                case PropertyType::BOOLEAN:
                    $values[] = (bool) $valueNode->nodeValue;
                    break;
                case PropertyType::LONG:
                    $values[] = (int) $valueNode->nodeValue;
                    break;
                case PropertyType::BINARY:
                    $values[] = (int) $valueNode->nodeValue;
                    break;
                case PropertyType::DATE:
                    $date = $valueNode->nodeValue;
                    if ($date) {
                        $date = new \DateTime($date);
                        $date->setTimezone(new \DateTimeZone(date_default_timezone_get()));
                        // Jackalope expects a string, might make sense to refactor to allow \DateTime instances too
                        $date = $this->valueConverter->convertType($date, PropertyType::STRING);
                    }
                    $values[] = $date;
                    break;
                case PropertyType::DOUBLE:
                    $values[] = (double) $valueNode->nodeValue;
                    break;
                default:
                    throw new \InvalidArgumentException("Type with constant {$type} not found.");
            }
        }
        switch ($type) {
            case PropertyType::BINARY:
                $data->{':' . $name} = $propertyNode->getAttribute('sv:multi-valued') ? $values : $values[0];
                break;
            default:
                $data->{$name} = $propertyNode->getAttribute('sv:multi-valued') ? $values : $values[0];
                $data->{':' . $name} = $type;
                break;
        }
    }