From 3c3684202d0f845b3d16cce0015a85dcd4d90f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Thu, 20 Sep 2018 15:39:51 +0200 Subject: [PATCH] =?UTF-8?q?-=20Gestion=20des=20num=C3=A9ros=20de=20page=20?= =?UTF-8?q?en=20cas=20de=20publipostage=20-=20Gestion=20des=20variables=20?= =?UTF-8?q?positionn=C3=A9es=20dans=20les=20ent=C3=AAtes=20et=20les=20pied?= =?UTF-8?q?s=20de=20page=20(en=20ca=20de=20publipostage,=20c'est=20la=20pr?= =?UTF-8?q?emi=C3=A8re=20salve=20de=20valeurs=20qui=20est=20prise=20en=20c?= =?UTF-8?q?ompte)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Publisher.php | 41 ++++++++++++++---------- src/Stylist.php | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+), 16 deletions(-) diff --git a/src/Publisher.php b/src/Publisher.php index 1ee526a..9d84322 100644 --- a/src/Publisher.php +++ b/src/Publisher.php @@ -161,6 +161,10 @@ class Publisher + + + + public function getSections(DOMElement $element): array { $textNs = $this->getDocument()->getNamespaceUrl('text'); @@ -224,15 +228,16 @@ class Publisher 'automatic-styles' )->item(0); - $styleNs = $this->getDocument()->getNamespaceUrl('style'); - - $stylePageBreak = $this->content->createElementNS($styleNs, 'style:style'); - $stylePageBreak->setAttributeNS($styleNs, 'style:name', self::PAGE_BREAK_NAME); - $stylePageBreak->setAttributeNS($styleNs, 'style:family', 'paragraph'); - $stylePageBreak->setAttributeNS($styleNs, 'style:parent-style-name', 'Standard'); - - $stylePageBreakProperties = $this->content->createElementNS($styleNs, 'style:paragraph-properties'); - $stylePageBreakProperties->setAttribute('fo:break-after', 'page'); + $stylePageBreak = $this->newElement('style:style', [ + 'style:name' => self::PAGE_BREAK_NAME, + 'style:family' => 'paragraph', + 'style:parent-style-name' => 'Standard', + 'style:master-page-name' => 'Standard', + ]); + $stylePageBreakProperties = $this->newElement('style:paragraph-properties', [ + 'style:writing-mode' => 'page', + 'style:page-number' => '1', + ]); $stylePageBreak->appendChild($stylePageBreakProperties); $styles->appendChild($stylePageBreak); @@ -335,9 +340,11 @@ class Publisher $this->setVariable($vElement, $val); } } - list($sName, $sType) = explode("@", $name); - if ($sType == 'text:section') { - $name = $sName; + if (false !== strpos($name, '@')) { + list($sName, $sType) = explode("@", $name); + if ($sType == 'text:section') { + $name = $sName; + } } if (isset($sections[$name])) { foreach ($sections[$name] as $sElement) { @@ -420,8 +427,10 @@ class Publisher $first = true; foreach ($this->values as $values) { $bodyNode = $this->body->cloneNode(true); - - if (!$first && $this->isAutoBreak()) { + if ($first){ + $this->getDocument()->getStylist()->setVariables($values); + $first = false; + }elseif($this->isAutoBreak()){ $this->addPageBreak($bodyNode); } @@ -448,7 +457,7 @@ class Publisher { $document = $this->getDocument(); - return $document->find($document->getContent(), $name); + return $document->find($this->content, $name); } @@ -477,7 +486,7 @@ class Publisher { $document = $this->getDocument(); - return $document->newElement($document->getContent(), $name, $attrs); + return $document->newElement($this->content, $name, $attrs); } diff --git a/src/Stylist.php b/src/Stylist.php index e12d9db..faf7a8c 100644 --- a/src/Stylist.php +++ b/src/Stylist.php @@ -79,6 +79,13 @@ class Stylist + /** + * @param $text + * @param array $options + * + * @return Stylist + * @throws Exception + */ public function addFiligrane($text, array $options = []): Stylist { $dw = strlen($text) * 2; @@ -204,6 +211,80 @@ class Stylist + /** + * @param DOMElement $element + * + * @return Publisher + * @throws Exception + */ + public function getVariables(): array + { + $textNs = $this->getDocument()->getNamespaceUrl('text'); + + $vElements = $this->find('text:variable-set'); + foreach ($vElements as $vElement) { + $name = $vElement->getAttributeNs($textNs, 'name'); + + if (!isset($variables[$name])) $variables[$name] = []; + $variables[$name][] = $vElement; + } + + return $variables; + } + + + + /** + * @param DOMElement $element + * @param string $value + * + * @return Publisher + */ + public function setVariable(DOMElement $element, string $value): Stylist + { + $textNs = $this->getDocument()->getNamespaceUrl('text'); + + $document = $element->ownerDocument; + + $value = explode("\n", $value); + for ($i = 0; $i < count($value); $i++) { + if ($i > 0) { + $returnVNode = $document->createElementNS($textNs, 'text:line-break'); + $element->parentNode->insertBefore($returnVNode, $element); + } + $vText = $document->createTextNode($value[$i]); + $element->parentNode->insertBefore($vText, $element); + } + $element->parentNode->removeChild($element); + $this->getDocument()->setStylesChanged(true); + + return $this; + } + + + + /** + * @param array $variables + * + * @return Stylist + * @throws Exception + */ + public function setVariables(array $variables): Stylist + { + $vars = $this->getVariables(); + foreach( $vars as $name => $elements ){ + if (isset($variables[$name])){ + foreach( $elements as $element ){ + $this->setVariable($element, $variables[$name]); + } + } + } + + return $this; + } + + + /** * @param string $name * -- GitLab