Loading src/Publisher.php +116 −44 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ namespace Unicaen\OpenDocument; use Exception; use DOMDocument; use DOMElement; use DOMNode; use DOMNodeList; use ZipArchive; class Publisher Loading Loading @@ -135,33 +137,6 @@ class Publisher /** * Crée un sous-document à parcourir ensuite * * @param string $node_name * @param string $variable_name * * @return Query */ public function subDoc($nodeName, $variableName) { return $this->query->subDoc($nodeName, $variableName); } /** * Cache une section * * @param string $sectionName */ public function hideSection($sectionName) { $this->query->hideSection($sectionName); } /** * @param DOMElement $element * Loading @@ -186,6 +161,33 @@ class Publisher public function getSections(DOMElement $element): array { $textNs = $this->getDocument()->getNamespaceUrl('text'); $sections = []; $vElements = $this->findFrom($element, 'text:section'); foreach ($vElements as $vElement) { $name = $vElement->getAttributeNS($textNs, 'name'); if (!isset($sections[$name])) $sections[$name] = []; $sections[$name][] = $vElement; } return $sections; } public function hideSection(DOMElement $section): Publisher { $section->parentNode->removeChild($section); return $this; } /** * @param DOMElement $element * @param string $value Loading Loading @@ -248,9 +250,6 @@ class Publisher $pageBreak->setAttributeNS($textNs, 'text:style-name', self::PAGE_BREAK_NAME); $element->insertBefore($pageBreak, $element->firstChild); /*$pageBreak = "<text:p text:style-name=\"".self::PAGE_BREAK_NAME."\"></text:p>"; $xml = str_replace('<office:text>','<office:text>'.$pageBreak, $xml);*/ return $this; } Loading Loading @@ -314,6 +313,7 @@ class Publisher private function publishValues(DOMElement $element, array $values): Publisher { $variables = $this->getVariables($element); $sections = $this->getSections($element); foreach ($values as $name => $val) { if (is_array($val)) { Loading @@ -324,11 +324,35 @@ class Publisher $this->publishSubData($elVar, $vparent, $val); } } } elseif (isset($variables[$name])) { if (isset($sections[$vname])) { foreach ($sections[$vname] as $elSec) { $this->publishSubData($elSec, $vparent, $val); } } } else { if (isset($variables[$name])) { foreach ($variables[$name] as $vElement) { $this->setVariable($vElement, $val); } } list($sName, $sType) = explode("@", $name); if ($sType == 'text:section') { $name = $sName; } if (isset($sections[$name])) { foreach ($sections[$name] as $sElement) { if ($val === null || $val === 0 || $val === '0' || $val === false || $val === '' || strtolower($val) === 'false' ) { $this->hideSection($sElement); } } } } } return $this; Loading @@ -345,6 +369,9 @@ class Publisher */ private function publishSubData(DOMElement $element, string $parent, array $values): Publisher { if ($element->tagName == 'text:section') { $parentNode = $element; // C'est la section qui est dupliquée } else { $i = 10; $found = false; for ($i = 0; $i < 10; $i++) { Loading @@ -358,6 +385,7 @@ class Publisher if (!$found) { throw new \Exception('Le noeud parent de type ' . $parent . ' n\'a pas été trouvé'); } } foreach ($values as $vals) { $clone = $parentNode->cloneNode(true); Loading Loading @@ -410,6 +438,50 @@ class Publisher /** * @param string $name * * @return DOMNode[] * @throws Exception */ private function find(string $name): DOMNodeList { $document = $this->getDocument(); return $document->find($document->getContent(), $name); } /** * @param DOMNode $node * @param $name * * @return DOMNodeList * @throws Exception */ private function findFrom(DOMNode $node, $name): DOMNodeList { return $this->getDocument()->find($node, $name); } /** * @param string $name * @param array $attrs * * @return DOMElement */ private function newElement(string $name, array $attrs = []): DOMElement { $document = $this->getDocument(); return $document->newElement($document->getContent(), $name, $attrs); } /** * Ajoute du contenu au fichier content.xml * Méthode à ne pas exploiter Loading Loading
src/Publisher.php +116 −44 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ namespace Unicaen\OpenDocument; use Exception; use DOMDocument; use DOMElement; use DOMNode; use DOMNodeList; use ZipArchive; class Publisher Loading Loading @@ -135,33 +137,6 @@ class Publisher /** * Crée un sous-document à parcourir ensuite * * @param string $node_name * @param string $variable_name * * @return Query */ public function subDoc($nodeName, $variableName) { return $this->query->subDoc($nodeName, $variableName); } /** * Cache une section * * @param string $sectionName */ public function hideSection($sectionName) { $this->query->hideSection($sectionName); } /** * @param DOMElement $element * Loading @@ -186,6 +161,33 @@ class Publisher public function getSections(DOMElement $element): array { $textNs = $this->getDocument()->getNamespaceUrl('text'); $sections = []; $vElements = $this->findFrom($element, 'text:section'); foreach ($vElements as $vElement) { $name = $vElement->getAttributeNS($textNs, 'name'); if (!isset($sections[$name])) $sections[$name] = []; $sections[$name][] = $vElement; } return $sections; } public function hideSection(DOMElement $section): Publisher { $section->parentNode->removeChild($section); return $this; } /** * @param DOMElement $element * @param string $value Loading Loading @@ -248,9 +250,6 @@ class Publisher $pageBreak->setAttributeNS($textNs, 'text:style-name', self::PAGE_BREAK_NAME); $element->insertBefore($pageBreak, $element->firstChild); /*$pageBreak = "<text:p text:style-name=\"".self::PAGE_BREAK_NAME."\"></text:p>"; $xml = str_replace('<office:text>','<office:text>'.$pageBreak, $xml);*/ return $this; } Loading Loading @@ -314,6 +313,7 @@ class Publisher private function publishValues(DOMElement $element, array $values): Publisher { $variables = $this->getVariables($element); $sections = $this->getSections($element); foreach ($values as $name => $val) { if (is_array($val)) { Loading @@ -324,11 +324,35 @@ class Publisher $this->publishSubData($elVar, $vparent, $val); } } } elseif (isset($variables[$name])) { if (isset($sections[$vname])) { foreach ($sections[$vname] as $elSec) { $this->publishSubData($elSec, $vparent, $val); } } } else { if (isset($variables[$name])) { foreach ($variables[$name] as $vElement) { $this->setVariable($vElement, $val); } } list($sName, $sType) = explode("@", $name); if ($sType == 'text:section') { $name = $sName; } if (isset($sections[$name])) { foreach ($sections[$name] as $sElement) { if ($val === null || $val === 0 || $val === '0' || $val === false || $val === '' || strtolower($val) === 'false' ) { $this->hideSection($sElement); } } } } } return $this; Loading @@ -345,6 +369,9 @@ class Publisher */ private function publishSubData(DOMElement $element, string $parent, array $values): Publisher { if ($element->tagName == 'text:section') { $parentNode = $element; // C'est la section qui est dupliquée } else { $i = 10; $found = false; for ($i = 0; $i < 10; $i++) { Loading @@ -358,6 +385,7 @@ class Publisher if (!$found) { throw new \Exception('Le noeud parent de type ' . $parent . ' n\'a pas été trouvé'); } } foreach ($values as $vals) { $clone = $parentNode->cloneNode(true); Loading Loading @@ -410,6 +438,50 @@ class Publisher /** * @param string $name * * @return DOMNode[] * @throws Exception */ private function find(string $name): DOMNodeList { $document = $this->getDocument(); return $document->find($document->getContent(), $name); } /** * @param DOMNode $node * @param $name * * @return DOMNodeList * @throws Exception */ private function findFrom(DOMNode $node, $name): DOMNodeList { return $this->getDocument()->find($node, $name); } /** * @param string $name * @param array $attrs * * @return DOMElement */ private function newElement(string $name, array $attrs = []): DOMElement { $document = $this->getDocument(); return $document->newElement($document->getContent(), $name, $attrs); } /** * Ajoute du contenu au fichier content.xml * Méthode à ne pas exploiter Loading