From 253b0602417e14755bdfa0b4cb17b9154cd8f2bc Mon Sep 17 00:00:00 2001 From: troosan Date: Wed, 13 Dec 2017 07:47:49 +0100 Subject: [PATCH] correctly parse on/off values (w:val="true|false|1|0|on|off") --- src/PhpWord/Reader/Word2007/AbstractPart.php | 18 +++++++++++++++--- tests/PhpWord/Reader/Word2007Test.php | 8 ++++++++ tests/PhpWord/_files/documents/reader.docx | Bin 105546 -> 105726 bytes tests/PhpWord/_includes/XmlDocument.php | 1 + 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/PhpWord/Reader/Word2007/AbstractPart.php b/src/PhpWord/Reader/Word2007/AbstractPart.php index 521c8a7f..4b7f6e0a 100644 --- a/src/PhpWord/Reader/Word2007/AbstractPart.php +++ b/src/PhpWord/Reader/Word2007/AbstractPart.php @@ -223,7 +223,7 @@ abstract class AbstractPart // $rIdIcon = $xmlReader->getAttribute('r:id', $domNode, 'w:object/v:shape/v:imagedata'); $target = $this->getMediaTarget($docPart, $rId); if (!is_null($target)) { - $textContent = ""; + $textContent = "<Object: {$target}>"; $parent->addText($textContent, $fontStyle, $paragraphStyle); } } else { @@ -477,9 +477,9 @@ abstract class AbstractPart if (self::READ_SIZE == $method) { $style = $attributeValue / 2; } elseif (self::READ_TRUE == $method) { - $style = true; + $style = $this->isOn($attributeValue); } elseif (self::READ_FALSE == $method) { - $style = false; + $style = !$this->isOn($attributeValue); } elseif (self::READ_EQUAL == $method) { $style = $attributeValue == $expected; } @@ -487,6 +487,18 @@ abstract class AbstractPart return $style; } + /** + * Parses the value of the on/off value, null is considered true as it means the w:val attribute was not present + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_OnOff.html + * @param string $value + * @return bool + */ + private function isOn($value = null) + { + return $value == null || $value == '1' || $value == 'true' || $value == 'on'; + } + /** * Returns the target of image, object, or link as stored in ::readMainRels * diff --git a/tests/PhpWord/Reader/Word2007Test.php b/tests/PhpWord/Reader/Word2007Test.php index 8b787247..9a555672 100644 --- a/tests/PhpWord/Reader/Word2007Test.php +++ b/tests/PhpWord/Reader/Word2007Test.php @@ -18,6 +18,7 @@ namespace PhpOffice\PhpWord\Reader; use PhpOffice\PhpWord\IOFactory; +use PhpOffice\PhpWord\TestHelperDOCX; /** * Test class for PhpOffice\PhpWord\Reader\Word2007 @@ -54,6 +55,13 @@ class Word2007Test extends \PHPUnit\Framework\TestCase { $filename = __DIR__ . '/../_files/documents/reader.docx'; $phpWord = IOFactory::load($filename); + $this->assertInstanceOf('PhpOffice\\PhpWord\\PhpWord', $phpWord); + $this->assertTrue($phpWord->getSettings()->hasDoNotTrackMoves()); + $this->assertFalse($phpWord->getSettings()->hasDoNotTrackFormatting()); + $this->assertEquals(100, $phpWord->getSettings()->getZoom()); + + $doc = TestHelperDOCX::getDocument($phpWord); + $this->assertFalse($doc->elementExists('/w:document/w:body/w:p/w:r[w:t/node()="italics"]/w:rPr/w:b')); } } diff --git a/tests/PhpWord/_files/documents/reader.docx b/tests/PhpWord/_files/documents/reader.docx index ef6b6615a90234c26186e5ea689de97d045c378a..65c761e0a6a7ebfc3594466155b30e98bc273072 100644 GIT binary patch delta 4496 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

%J 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 DJ_F4a diff --git a/tests/PhpWord/_includes/XmlDocument.php b/tests/PhpWord/_includes/XmlDocument.php index c82c5a8e..21a12105 100644 --- a/tests/PhpWord/_includes/XmlDocument.php +++ b/tests/PhpWord/_includes/XmlDocument.php @@ -97,6 +97,7 @@ class XmlDocument if (null === $this->xpath) { $this->xpath = new \DOMXpath($this->dom); + $this->xpath->registerNamespace('w14', 'http://schemas.microsoft.com/office/word/2010/wordml'); } return $this->xpath->query($path);