Refactoring: Extends Endnotes from Footnotes & Heder from Footer
This commit is contained in:
parent
b2a0e08db9
commit
704cc2fe04
@ -20,12 +20,19 @@ namespace PhpOffice\PhpWord\Reader\Word2007;
|
|||||||
/**
|
/**
|
||||||
* Endnotes reader
|
* Endnotes reader
|
||||||
*/
|
*/
|
||||||
class Endnotes extends Notes
|
class Endnotes extends Footnotes
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Note type = endnotes
|
* Collection name
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $type = 'endnotes';
|
protected $collection = 'endnotes';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Element name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $element = 'endnote';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,15 +17,58 @@
|
|||||||
|
|
||||||
namespace PhpOffice\PhpWord\Reader\Word2007;
|
namespace PhpOffice\PhpWord\Reader\Word2007;
|
||||||
|
|
||||||
|
use PhpOffice\PhpWord\PhpWord;
|
||||||
|
use PhpOffice\PhpWord\Shared\XMLReader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Footnotes reader
|
* Footnotes reader
|
||||||
*/
|
*/
|
||||||
class Footnotes extends Notes
|
class Footnotes extends AbstractPart
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Note type = footnotes
|
* Collection name footnotes|endnotes
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $type = 'footnotes';
|
protected $collection = 'footnotes';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Element name footnote|endnote
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $element = 'footnote';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read (footnotes|endnotes).xml
|
||||||
|
*
|
||||||
|
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
||||||
|
*/
|
||||||
|
public function read(PhpWord &$phpWord)
|
||||||
|
{
|
||||||
|
$getMethod = "get{$this->collection}";
|
||||||
|
$collection = $phpWord->$getMethod()->getItems();
|
||||||
|
|
||||||
|
$xmlReader = new XMLReader();
|
||||||
|
$xmlReader->getDomFromZip($this->docFile, $this->xmlFile);
|
||||||
|
$nodes = $xmlReader->getElements('*');
|
||||||
|
if ($nodes->length > 0) {
|
||||||
|
foreach ($nodes as $node) {
|
||||||
|
$id = $xmlReader->getAttribute('w:id', $node);
|
||||||
|
$type = $xmlReader->getAttribute('w:type', $node);
|
||||||
|
|
||||||
|
// Avoid w:type "separator" and "continuationSeparator"
|
||||||
|
// Only look for <footnote> or <endnote> without w:type attribute
|
||||||
|
if (is_null($type) && array_key_exists($id, $collection)) {
|
||||||
|
$element = $collection[$id];
|
||||||
|
$pNodes = $xmlReader->getElements('w:p/*', $node);
|
||||||
|
foreach ($pNodes as $pNode) {
|
||||||
|
$this->readRun($xmlReader, $pNode, $element, $this->collection);
|
||||||
|
}
|
||||||
|
$addMethod = "add{$this->element}";
|
||||||
|
$phpWord->$addMethod($element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,68 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* This file is part of PHPWord - A pure PHP library for reading and writing
|
|
||||||
* word processing documents.
|
|
||||||
*
|
|
||||||
* PHPWord is free software distributed under the terms of the GNU Lesser
|
|
||||||
* General Public License version 3 as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please read the LICENSE
|
|
||||||
* file that was distributed with this source code. For the full list of
|
|
||||||
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
|
|
||||||
*
|
|
||||||
* @link https://github.com/PHPOffice/PHPWord
|
|
||||||
* @copyright 2010-2014 PHPWord contributors
|
|
||||||
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace PhpOffice\PhpWord\Reader\Word2007;
|
|
||||||
|
|
||||||
use PhpOffice\PhpWord\PhpWord;
|
|
||||||
use PhpOffice\PhpWord\Shared\XMLReader;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Notes reader
|
|
||||||
*/
|
|
||||||
class Notes extends AbstractPart
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Note type footnotes|endnotes
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $type = 'footnotes';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read (footnotes|endnotes).xml
|
|
||||||
*
|
|
||||||
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
|
||||||
*/
|
|
||||||
public function read(PhpWord &$phpWord)
|
|
||||||
{
|
|
||||||
$this->type = ($this->type == 'endnotes') ? 'endnotes' : 'footnotes';
|
|
||||||
$getMethod = 'get' . $this->type;
|
|
||||||
$collection = $phpWord->$getMethod()->getItems();
|
|
||||||
|
|
||||||
$xmlReader = new XMLReader();
|
|
||||||
$xmlReader->getDomFromZip($this->docFile, $this->xmlFile);
|
|
||||||
$nodes = $xmlReader->getElements('*');
|
|
||||||
if ($nodes->length > 0) {
|
|
||||||
foreach ($nodes as $node) {
|
|
||||||
$id = $xmlReader->getAttribute('w:id', $node);
|
|
||||||
$type = $xmlReader->getAttribute('w:type', $node);
|
|
||||||
|
|
||||||
// Avoid w:type "separator" and "continuationSeparator"
|
|
||||||
// Only look for <footnote> or <endnote> without w:type attribute
|
|
||||||
if (is_null($type) && array_key_exists($id, $collection)) {
|
|
||||||
$element = $collection[$id];
|
|
||||||
$pNodes = $xmlReader->getElements('w:p/*', $node);
|
|
||||||
foreach ($pNodes as $pNode) {
|
|
||||||
$this->readRun($xmlReader, $pNode, $element, $this->type);
|
|
||||||
}
|
|
||||||
$addMethod = 'add' . ($this->type == 'endnotes' ? 'endnote' : 'footnote');
|
|
||||||
$phpWord->$addMethod($element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
||||||
|
|
||||||
use PhpOffice\PhpWord\Element\Footer as FooterElement;
|
use PhpOffice\PhpWord\Element\AbstractContainer as Container;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Word2007 footer part writer
|
* Word2007 footer part writer
|
||||||
@ -25,16 +25,23 @@ use PhpOffice\PhpWord\Element\Footer as FooterElement;
|
|||||||
class Footer extends AbstractPart
|
class Footer extends AbstractPart
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Write word/footnotes.xml
|
* Root element name
|
||||||
*
|
*
|
||||||
* @param \PhpOffice\PhpWord\Element\Footer $footer
|
* @var string
|
||||||
*/
|
*/
|
||||||
public function writeFooter(FooterElement $footer)
|
protected $rootElement = 'w:ftr';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write word/footerx.xml
|
||||||
|
*
|
||||||
|
* @param \PhpOffice\PhpWord\Element\AbstractContainer $element
|
||||||
|
*/
|
||||||
|
public function writeFooter(Container $element)
|
||||||
{
|
{
|
||||||
$xmlWriter = $this->getXmlWriter();
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
|
||||||
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
||||||
$xmlWriter->startElement('w:ftr');
|
$xmlWriter->startElement($this->rootElement);
|
||||||
$xmlWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
|
$xmlWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
|
||||||
$xmlWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
|
$xmlWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
|
||||||
$xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
|
$xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
|
||||||
@ -45,9 +52,9 @@ class Footer extends AbstractPart
|
|||||||
$xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
|
$xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
|
||||||
$xmlWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
|
$xmlWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
|
||||||
|
|
||||||
$this->writeContainerElements($xmlWriter, $footer);
|
$this->writeContainerElements($xmlWriter, $element);
|
||||||
|
|
||||||
$xmlWriter->endElement(); // w:ftr
|
$xmlWriter->endElement(); // $this->rootElement
|
||||||
|
|
||||||
return $xmlWriter->getData();
|
return $xmlWriter->getData();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,38 +17,27 @@
|
|||||||
|
|
||||||
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
||||||
|
|
||||||
use PhpOffice\PhpWord\Element\Header as HeaderElement;
|
use PhpOffice\PhpWord\Element\AbstractContainer as Container;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Word2007 header part writer
|
* Word2007 header part writer
|
||||||
*/
|
*/
|
||||||
class Header extends AbstractPart
|
class Header extends Footer
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Root element name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $rootElement = 'w:hdr';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write word/headerx.xml
|
* Write word/headerx.xml
|
||||||
*
|
*
|
||||||
* @param \PhpOffice\PhpWord\Element\Header $header
|
* @param \PhpOffice\PhpWord\Element\AbstractContainer $element
|
||||||
*/
|
*/
|
||||||
public function writeHeader(HeaderElement $header)
|
public function writeHeader(Container $element)
|
||||||
{
|
{
|
||||||
$xmlWriter = $this->getXmlWriter();
|
return $this->writeFooter($element);
|
||||||
|
|
||||||
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
|
||||||
$xmlWriter->startElement('w:hdr');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
|
|
||||||
|
|
||||||
$this->writeContainerElements($xmlWriter, $header);
|
|
||||||
|
|
||||||
$xmlWriter->endElement(); // w:hdr
|
|
||||||
|
|
||||||
return $xmlWriter->getData();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user