/** * Read custom document properties * * @param \PhpOffice\PhpWord\PhpWord $phpWord */ public function read(PhpWord &$phpWord) { $xmlReader = new XMLReader(); $xmlReader->getDomFromZip($this->docFile, $this->xmlFile); $docProps = $phpWord->getDocumentProperties(); $nodes = $xmlReader->getElements('*'); if ($nodes->length > 0) { foreach ($nodes as $node) { $propertyName = $xmlReader->getAttribute('name', $node); $attributeNode = $xmlReader->getElement('*', $node); $attributeType = $attributeNode->nodeName; $attributeValue = $attributeNode->nodeValue; $attributeValue = DocumentProperties::convertProperty($attributeValue, $attributeType); $attributeType = DocumentProperties::convertPropertyType($attributeType); $docProps->setCustomProperty($propertyName, $attributeValue, $attributeType); } } }
/** * Convert property */ public function testConvertProperty() { $this->assertEquals('', DocumentProperties::convertProperty('a', 'empty')); $this->assertEquals(null, DocumentProperties::convertProperty('a', 'null')); $this->assertEquals(8, DocumentProperties::convertProperty('8', 'int')); $this->assertEquals(8, DocumentProperties::convertProperty('8.3', 'uint')); $this->assertEquals(8.300000000000001, DocumentProperties::convertProperty('8.3', 'decimal')); $this->assertEquals('8.3', DocumentProperties::convertProperty('8.3', 'lpstr')); $this->assertEquals(strtotime('10/11/2013'), DocumentProperties::convertProperty('10/11/2013', 'date')); $this->assertEquals(true, DocumentProperties::convertProperty('true', 'bool')); $this->assertEquals(false, DocumentProperties::convertProperty('1', 'bool')); $this->assertEquals('1', DocumentProperties::convertProperty('1', 'array')); $this->assertEquals('1', DocumentProperties::convertProperty('1', '')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_INTEGER, DocumentProperties::convertPropertyType('int')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_INTEGER, DocumentProperties::convertPropertyType('uint')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_FLOAT, DocumentProperties::convertPropertyType('decimal')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_STRING, DocumentProperties::convertPropertyType('lpstr')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_DATE, DocumentProperties::convertPropertyType('date')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_BOOLEAN, DocumentProperties::convertPropertyType('bool')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_UNKNOWN, DocumentProperties::convertPropertyType('array')); $this->assertEquals(DocumentProperties::PROPERTY_TYPE_UNKNOWN, DocumentProperties::convertPropertyType('')); }