From b919d58bac19be02cc7dc60bb6e1e51dcb667f8e Mon Sep 17 00:00:00 2001 From: troosan Date: Thu, 6 Jul 2017 22:41:04 +0200 Subject: [PATCH] add reader for settings --- src/PhpWord/Metadata/Settings.php | 6 +- src/PhpWord/Reader/Word2007.php | 1 + src/PhpWord/Reader/Word2007/Settings.php | 76 ++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 src/PhpWord/Reader/Word2007/Settings.php diff --git a/src/PhpWord/Metadata/Settings.php b/src/PhpWord/Metadata/Settings.php index ba6931a0..d1d1f0ce 100644 --- a/src/PhpWord/Metadata/Settings.php +++ b/src/PhpWord/Metadata/Settings.php @@ -90,7 +90,7 @@ class Settings */ public function setHideSpellingErrors($hideSpellingErrors) { - $this->hideSpellingErrors = $hideSpellingErrors; + $this->hideSpellingErrors = $hideSpellingErrors === null ? true : $hideSpellingErrors; } /** @@ -110,7 +110,7 @@ class Settings */ public function setHideGrammaticalErrors($hideGrammaticalErrors) { - $this->hideGrammaticalErrors = $hideGrammaticalErrors; + $this->hideGrammaticalErrors = $hideGrammaticalErrors === null ? true : $hideGrammaticalErrors; } /** @@ -126,6 +126,6 @@ class Settings */ public function setEvenAndOddHeaders($evenAndOddHeaders) { - $this->evenAndOddHeaders = $evenAndOddHeaders; + $this->evenAndOddHeaders = $evenAndOddHeaders === null ? true : $evenAndOddHeaders; } } diff --git a/src/PhpWord/Reader/Word2007.php b/src/PhpWord/Reader/Word2007.php index da20eb87..875415a3 100644 --- a/src/PhpWord/Reader/Word2007.php +++ b/src/PhpWord/Reader/Word2007.php @@ -55,6 +55,7 @@ class Word2007 extends AbstractReader implements ReaderInterface array('stepPart' => 'document', 'stepItems' => array( 'endnotes' => 'Endnotes', 'footnotes' => 'Footnotes', + 'settings' => 'Settings', )), ); diff --git a/src/PhpWord/Reader/Word2007/Settings.php b/src/PhpWord/Reader/Word2007/Settings.php new file mode 100644 index 00000000..9ab8ee40 --- /dev/null +++ b/src/PhpWord/Reader/Word2007/Settings.php @@ -0,0 +1,76 @@ +getDomFromZip($this->docFile, $this->xmlFile); + + $docSettings = $phpWord->getSettings(); + + $nodes = $xmlReader->getElements('*'); + if ($nodes->length > 0) { + foreach ($nodes as $node) { + $name = str_replace('w:', '', $node->nodeName); + $value = $xmlReader->getAttribute('w:val', $node); + $method = 'set' . $name; + + if (in_array($name, $this::$booleanProperties)) { + if ($value == 'false') { + $docSettings->$method(false); + } else { + $docSettings->$method(true); + } + } else if (method_exists($this, $method)) { + $this->$method($xmlReader, $phpWord, $node); + } else if (method_exists($this, $method)) { + $docSettings->$method($value); + } + } + } + } + + private function setDocumentProtection(XMLReader $xmlReader, PhpWord $phpWord, \DOMNode $node) { + $documentProtection = $phpWord->getSettings()->getDocumentProtection(); + + $edit = $xmlReader->getAttribute('w:edit', $node); + $documentProtection->setEditing($edit); + } +}