diff --git a/src/PhpWord/Element/AbstractContainer.php b/src/PhpWord/Element/AbstractContainer.php index b2e2aad4..290c54d9 100644 --- a/src/PhpWord/Element/AbstractContainer.php +++ b/src/PhpWord/Element/AbstractContainer.php @@ -39,7 +39,7 @@ abstract class AbstractContainer extends AbstractElement */ protected function addElement(AbstractElement $element) { - // $type = basename(get_class($element)); + // $type = str_replace('PhpOffice\\PhpWord\\Element\\', '', get_class($element))); $element->setElementIndex($this->countElements() + 1); $element->setElementId(); $element->setPhpWord($this->phpWord); diff --git a/src/PhpWord/Writer/HTML/Element/Element.php b/src/PhpWord/Writer/HTML/Element/Element.php index 85525129..5098ba2e 100644 --- a/src/PhpWord/Writer/HTML/Element/Element.php +++ b/src/PhpWord/Writer/HTML/Element/Element.php @@ -73,8 +73,7 @@ class Element public function write() { $content = ''; - $writerClass = substr(get_class($this), 0, strrpos(get_class($this), '\\')) . '\\' . - basename(get_class($this->element)); + $writerClass = str_replace('\\Element\\', '\\Writer\\HTML\\Element\\', get_class($this->element)); if (class_exists($writerClass)) { $writer = new $writerClass($this->parentWriter, $this->element, $this->withoutP); $content = $writer->write(); diff --git a/src/PhpWord/Writer/ODText/Element/Container.php b/src/PhpWord/Writer/ODText/Element/Container.php index 4f3080a9..30517bb9 100644 --- a/src/PhpWord/Writer/ODText/Element/Container.php +++ b/src/PhpWord/Writer/ODText/Element/Container.php @@ -24,4 +24,10 @@ namespace PhpOffice\PhpWord\Writer\ODText\Element; */ class Container extends \PhpOffice\PhpWord\Writer\Word2007\Element\Container { + /** + * Namespace; Can't use __NAMESPACE__ in inherited class (ODText) + * + * @var string + */ + protected $namespace = 'PhpOffice\\PhpWord\\Writer\\ODText\\Element'; } diff --git a/src/PhpWord/Writer/ODText/Part/Content.php b/src/PhpWord/Writer/ODText/Part/Content.php index d5f1353c..f5ae1883 100644 --- a/src/PhpWord/Writer/ODText/Part/Content.php +++ b/src/PhpWord/Writer/ODText/Part/Content.php @@ -101,7 +101,7 @@ class Content extends AbstractPart if (preg_match('#^T[0-9]+$#', $styleName) != 0 || preg_match('#^P[0-9]+$#', $styleName) != 0 ) { - $styleClass = 'PhpOffice\\PhpWord\\Writer\\ODText\\Style\\' . basename(get_class($style)); + $styleClass = str_replace('\\Style\\', '\\Writer\\ODText\\Style\\', get_class($style)); if (class_exists($styleClass)) { $styleWriter = new $styleClass($xmlWriter, $style); $styleWriter->setIsAuto(true); diff --git a/src/PhpWord/Writer/ODText/Part/Styles.php b/src/PhpWord/Writer/ODText/Part/Styles.php index bc4bf4f3..7641d94f 100644 --- a/src/PhpWord/Writer/ODText/Part/Styles.php +++ b/src/PhpWord/Writer/ODText/Part/Styles.php @@ -91,7 +91,7 @@ class Styles extends AbstractPart if (preg_match('#^T[0-9]+$#', $styleName) == 0 && preg_match('#^P[0-9]+$#', $styleName) == 0 ) { - $styleClass = 'PhpOffice\\PhpWord\\Writer\\ODText\\Style\\' . basename(get_class($style)); + $styleClass = str_replace('\\Style\\', '\\Writer\\ODText\\Style\\', get_class($style)); if (class_exists($styleClass)) { $styleWriter = new $styleClass($xmlWriter, $style); $styleWriter->write(); diff --git a/src/PhpWord/Writer/RTF/Element/Element.php b/src/PhpWord/Writer/RTF/Element/Element.php index 7a2126e4..8464a377 100644 --- a/src/PhpWord/Writer/RTF/Element/Element.php +++ b/src/PhpWord/Writer/RTF/Element/Element.php @@ -68,8 +68,7 @@ class Element public function write() { $content = ''; - $writerClass = substr(get_class($this), 0, strrpos(get_class($this), '\\')) . '\\' . - basename(get_class($this->element)); + $writerClass = str_replace('\\Element\\', '\\Writer\\RTF\\Element\\', get_class($this->element)); if (class_exists($writerClass)) { $writer = new $writerClass($this->parentWriter, $this->element, $this->withoutP); $content = $writer->write(); diff --git a/src/PhpWord/Writer/Word2007/Element/AbstractElement.php b/src/PhpWord/Writer/Word2007/Element/AbstractElement.php index 67cffdc6..65b3c400 100644 --- a/src/PhpWord/Writer/Word2007/Element/AbstractElement.php +++ b/src/PhpWord/Writer/Word2007/Element/AbstractElement.php @@ -84,12 +84,7 @@ abstract class AbstractElement protected function getElement() { if (!is_null($this->element)) { - $elementClass = 'PhpOffice\\PhpWord\\Element\\' . basename(get_class($this->element)); - if ($this->element instanceof $elementClass) { - return $this->element; - } else { - throw new Exception('No valid element assigned.'); - } + return $this->element; } else { throw new Exception('No element assigned.'); } diff --git a/src/PhpWord/Writer/Word2007/Element/Container.php b/src/PhpWord/Writer/Word2007/Element/Container.php index 4b3c8109..de2e90d9 100644 --- a/src/PhpWord/Writer/Word2007/Element/Container.php +++ b/src/PhpWord/Writer/Word2007/Element/Container.php @@ -26,6 +26,13 @@ use PhpOffice\PhpWord\Element\TextBreak as TextBreakElement; */ class Container extends AbstractElement { + /** + * Namespace; Can't use __NAMESPACE__ in inherited class (ODText) + * + * @var string + */ + protected $namespace = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Element'; + /** * Write element */ @@ -35,13 +42,12 @@ class Container extends AbstractElement $container = $this->getElement(); // Loop through subelements - $containerClass = basename(get_class($container)); + $containerClass = substr(get_class($container), strrpos(get_class($this), '\\') + 1); $subelements = $container->getElements(); $withoutP = in_array($containerClass, array('TextRun', 'Footnote', 'Endnote', 'TextBox')) ? true : false; if (count($subelements) > 0) { foreach ($subelements as $subelement) { - $writerClass = substr(get_class($this), 0, strrpos(get_class($this), '\\')) . '\\' . - basename(get_class($subelement)); + $writerClass = str_replace('PhpOffice\\PhpWord\\Element', $this->namespace, get_class($subelement)); if (class_exists($writerClass)) { $writer = new $writerClass($xmlWriter, $subelement, $withoutP); $writer->write(); @@ -50,7 +56,7 @@ class Container extends AbstractElement } else { // Special case for Cell: They have to contain a TextBreak at least if ($containerClass == 'Cell') { - $writerClass = substr(get_class($this), 0, strrpos(get_class($this), '\\')) . '\\TextBreak'; + $writerClass = "{$this->namespace}\\TextBreak"; $writer = new $writerClass($xmlWriter, new TextBreakElement(), $withoutP); $writer->write(); } diff --git a/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php b/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php index 7213e4aa..dad0ce07 100644 --- a/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php +++ b/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php @@ -75,13 +75,6 @@ abstract class AbstractStyle */ protected function getStyle() { - if (!is_null($this->style)) { - $styleClass = 'PhpOffice\\PhpWord\\Style\\' . basename(get_class($this->style)); - if (is_object($this->style) && (!$this->style instanceof $styleClass)) { - throw new Exception('No valid style assigned.'); - } - } - return $this->style; }