diff --git a/src/PhpWord/Element/AbstractContainer.php b/src/PhpWord/Element/AbstractContainer.php index 2a8815d4..c575f80e 100644 --- a/src/PhpWord/Element/AbstractContainer.php +++ b/src/PhpWord/Element/AbstractContainer.php @@ -78,7 +78,7 @@ abstract class AbstractContainer extends AbstractElement public function addText($text, $fontStyle = null, $paragraphStyle = null, $elementName = 'Text') { $this->checkValidity($elementName); - $elementClass = dirname(get_class($this)) . '\\' . $elementName; + $elementClass = __NAMESPACE__ . '\\' . $elementName; // Reset paragraph style for footnote and textrun. They have their own if (in_array($this->container, array('textrun', 'footnote', 'endnote'))) { @@ -248,7 +248,7 @@ abstract class AbstractContainer extends AbstractElement public function addFootnote($paragraphStyle = null, $elementName = 'Footnote') { $this->checkValidity($elementName); - $elementClass = dirname(get_class($this)) . '\\' . $elementName; + $elementClass = __NAMESPACE__ . '\\' . $elementName; $docPart = strtolower($elementName); $addMethod = "add{$elementName}"; diff --git a/src/PhpWord/Element/Section.php b/src/PhpWord/Element/Section.php index 639f752e..dc216fce 100644 --- a/src/PhpWord/Element/Section.php +++ b/src/PhpWord/Element/Section.php @@ -223,7 +223,7 @@ class Section extends AbstractContainer private function addHeaderFooter($type = Header::AUTO, $header = true) { $collectionArray = $header ? 'headers' : 'footers'; - $containerClass = dirname(get_class($this)) . '\\' . ($header ? 'Header' : 'Footer'); + $containerClass = __NAMESPACE__ . '\\' . ($header ? 'Header' : 'Footer'); $collection = &$this->$collectionArray; if (in_array($type, array(Header::AUTO, Header::FIRST, Header::EVEN))) { diff --git a/src/PhpWord/Element/TextBox.php b/src/PhpWord/Element/TextBox.php index 1de74649..041c2657 100644 --- a/src/PhpWord/Element/TextBox.php +++ b/src/PhpWord/Element/TextBox.php @@ -20,7 +20,9 @@ namespace PhpOffice\PhpWord\Element; use PhpOffice\PhpWord\Style\TextBox as TextBoxStyle; /** - * Table element + * TextBox element + * + * @since 0.11.0 */ class TextBox extends AbstractContainer { diff --git a/src/PhpWord/Style/AbstractStyle.php b/src/PhpWord/Style/AbstractStyle.php index f43aba90..082596af 100644 --- a/src/PhpWord/Style/AbstractStyle.php +++ b/src/PhpWord/Style/AbstractStyle.php @@ -249,7 +249,7 @@ abstract class AbstractStyle */ protected function setObjectVal($value, $styleName, &$style) { - $styleClass = dirname(get_class($this)) . '\\' . $styleName; + $styleClass = __NAMESPACE__ . '\\' . $styleName; if (is_array($value)) { if (!$style instanceof $styleClass) { $style = new $styleClass(); diff --git a/src/PhpWord/Style/TextBox.php b/src/PhpWord/Style/TextBox.php index 0411e5d9..401e2cc0 100644 --- a/src/PhpWord/Style/TextBox.php +++ b/src/PhpWord/Style/TextBox.php @@ -19,6 +19,8 @@ namespace PhpOffice\PhpWord\Style; /** * TextBox style + * + * @since 0.11.0 */ class TextBox extends Image { diff --git a/src/PhpWord/Writer/HTML/Element/Element.php b/src/PhpWord/Writer/HTML/Element/Element.php index b0d25b44..7ad8a00d 100644 --- a/src/PhpWord/Writer/HTML/Element/Element.php +++ b/src/PhpWord/Writer/HTML/Element/Element.php @@ -73,7 +73,7 @@ class Element public function write() { $content = ''; - $writerClass = dirname(get_class($this)) . '\\' . basename(get_class($this->element)); + $writerClass = __NAMESPACE__ . '\\' . basename(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/RTF/Element/Element.php b/src/PhpWord/Writer/RTF/Element/Element.php index f4d09e36..d460deac 100644 --- a/src/PhpWord/Writer/RTF/Element/Element.php +++ b/src/PhpWord/Writer/RTF/Element/Element.php @@ -68,7 +68,7 @@ class Element public function write() { $content = ''; - $writerClass = dirname(get_class($this)) . '\\' . basename(get_class($this->element)); + $writerClass = __NAMESPACE__ . '\\' . basename(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/Container.php b/src/PhpWord/Writer/Word2007/Element/Container.php index 7baf7e3b..377241ee 100644 --- a/src/PhpWord/Writer/Word2007/Element/Container.php +++ b/src/PhpWord/Writer/Word2007/Element/Container.php @@ -37,10 +37,10 @@ class Container extends AbstractElement // Loop through subelements $containerClass = basename(get_class($element)); $subelements = $element->getElements(); - $withoutP = in_array($containerClass, array('TextRun', 'Footnote', 'Endnote')) ? true : false; + $withoutP = in_array($containerClass, array('TextRun', 'Footnote', 'Endnote', 'TextBox')) ? true : false; if (count($subelements) > 0) { foreach ($subelements as $subelement) { - $writerClass = dirname(get_class($this)) . '\\' . basename(get_class($subelement)); + $writerClass = __NAMESPACE__ . '\\' . basename(get_class($subelement)); if (class_exists($writerClass)) { $writer = new $writerClass($xmlWriter, $subelement, $withoutP); $writer->write(); @@ -49,7 +49,7 @@ class Container extends AbstractElement } else { // Special case for Cell: They have to contain a TextBreak at least if ($containerClass == 'Cell') { - $writerClass = dirname(get_class($this)) . '\\TextBreak'; + $writerClass = __NAMESPACE__ . '\\TextBreak'; $writer = new $writerClass($xmlWriter, new TextBreakElement(), $withoutP); $writer->write(); } diff --git a/src/PhpWord/Writer/Word2007/Element/TextBox.php b/src/PhpWord/Writer/Word2007/Element/TextBox.php index fd1683ae..1ee8a4cb 100644 --- a/src/PhpWord/Writer/Word2007/Element/TextBox.php +++ b/src/PhpWord/Writer/Word2007/Element/TextBox.php @@ -23,52 +23,61 @@ use PhpOffice\PhpWord\Writer\Word2007\Style\TextBox as TextBoxStyleWriter; /** * TextBox element writer * + * @since 0.11.0 */ -class TextBox extends Element +class TextBox extends AbstractElement { /** * Write element */ public function write() { - $tbxStyle = $this->element->getStyle(); - if ($tbxStyle instanceof TextBoxStyle) { - $styleWriter = new TextBoxStyleWriter($this->xmlWriter, $tbxStyle); + $xmlWriter = $this->getXmlWriter(); + $element = $this->getElement(); + $style = $element->getStyle(); + + if ($style instanceof TextBoxStyle) { + $styleWriter = new TextBoxStyleWriter($xmlWriter, $style); $styleWriter->write(); } if (!$this->withoutP) { - $this->xmlWriter->startElement('w:p'); - if (!is_null($tbxStyle->getAlign())) { - $this->xmlWriter->startElement('w:pPr'); - $this->xmlWriter->startElement('w:jc'); - $this->xmlWriter->writeAttribute('w:val', $tbxStyle->getAlign()); - $this->xmlWriter->endElement(); // w:jc - $this->xmlWriter->endElement(); // w:pPr + $xmlWriter->startElement('w:p'); + if (!is_null($style->getAlign())) { + $xmlWriter->startElement('w:pPr'); + $xmlWriter->startElement('w:jc'); + $xmlWriter->writeAttribute('w:val', $style->getAlign()); + $xmlWriter->endElement(); // w:jc + $xmlWriter->endElement(); // w:pPr } } - $this->xmlWriter->startElement('w:r'); - $this->xmlWriter->startElement('w:pict'); - $this->xmlWriter->startElement('v:shape'); - $this->xmlWriter->writeAttribute('type', '#_x0000_t0202'); + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:pict'); + $xmlWriter->startElement('v:shape'); + $xmlWriter->writeAttribute('type', '#_x0000_t0202'); $styleWriter->write(); - $this->xmlWriter->startElement('v:textbox'); - $margins = implode(', ', $tbxStyle->getInnerMargin()); - $this->xmlWriter->writeAttribute('inset', $margins); - $this->xmlWriter->startElement('w:txbxContent'); - $this->xmlWriter->startElement('w:p'); - $this->parentWriter->writeContainerElements($this->xmlWriter, $this->element); - $this->xmlWriter->endElement(); // w:p - $this->xmlWriter->endElement(); // w:txbxContent - $this->xmlWriter->endElement(); // v: textbox + + $xmlWriter->startElement('v:textbox'); + $margins = implode(', ', $style->getInnerMargin()); + $xmlWriter->writeAttribute('inset', $margins); + + $xmlWriter->startElement('w:txbxContent'); + $xmlWriter->startElement('w:p'); + $containerWriter = new Container($xmlWriter, $element); + $containerWriter->write(); + $xmlWriter->endElement(); // w:p + $xmlWriter->endElement(); // w:txbxContent + + $xmlWriter->endElement(); // v: textbox + $styleWriter->writeW10Wrap(); - $this->xmlWriter->endElement(); // v:shape - $this->xmlWriter->endElement(); // w:pict - $this->xmlWriter->endElement(); // w:r + $xmlWriter->endElement(); // v:shape + $xmlWriter->endElement(); // w:pict + $xmlWriter->endElement(); // w:r if (!$this->withoutP) { - $this->xmlWriter->endElement(); // w:p + $xmlWriter->endElement(); // w:p } } } diff --git a/src/PhpWord/Writer/Word2007/Style/Image.php b/src/PhpWord/Writer/Word2007/Style/Image.php index 79b218d6..2dd3398c 100644 --- a/src/PhpWord/Writer/Word2007/Style/Image.php +++ b/src/PhpWord/Writer/Word2007/Style/Image.php @@ -31,7 +31,7 @@ class Image extends AbstractStyle * * @var string */ - private $w10wrap; + protected $w10wrap; /** * Write style @@ -52,7 +52,7 @@ class Image extends AbstractStyle 'mso-width-relative' => 'margin', 'mso-height-relative' => 'margin', ); - $styleArray = array_merge($styleArray, $this->getElementStyle($this->style)); + $styleArray = array_merge($styleArray, $this->getElementStyle($style)); // Absolute/relative positioning $styleArray['position'] = $positioning; @@ -112,7 +112,7 @@ class Image extends AbstractStyle * * @return array */ - private function getElementStyle(ImageStyle $style) + protected function getElementStyle(ImageStyle $style) { $styles = array(); $styleValues = array( @@ -136,7 +136,7 @@ class Image extends AbstractStyle * @param array $styles * @return string */ - private function assembleStyle($styles = array()) + protected function assembleStyle($styles = array()) { $style = ''; foreach ($styles as $key => $value) { diff --git a/src/PhpWord/Writer/Word2007/Style/TextBox.php b/src/PhpWord/Writer/Word2007/Style/TextBox.php index 18c8a60f..f526f888 100644 --- a/src/PhpWord/Writer/Word2007/Style/TextBox.php +++ b/src/PhpWord/Writer/Word2007/Style/TextBox.php @@ -1,19 +1,19 @@ style instanceof \PhpOffice\PhpWord\Style\TextBox)) { + if (is_null($style = $this->getStyle())) { return; } - - $wrapping = $this->style->getWrappingStyle(); - $positioning = $this->style->getPositioning(); + $xmlWriter = $this->getXmlWriter(); + $wrapping = $style->getWrappingStyle(); + $positioning = $style->getPositioning(); // Default style array $styleArray = array( @@ -51,7 +45,7 @@ class TextBox extends AbstractStyle 'mso-width-relative' => 'margin', 'mso-height-relative' => 'margin', ); - $styleArray = array_merge($styleArray, $this->getElementStyle()); + $styleArray = array_merge($styleArray, $this->getElementStyle($style)); // Absolute/relative positioning $styleArray['position'] = $positioning; @@ -59,10 +53,10 @@ class TextBox extends AbstractStyle $styleArray['mso-position-horizontal-relative'] = 'page'; $styleArray['mso-position-vertical-relative'] = 'page'; } elseif ($positioning == TextBoxStyle::POSITION_RELATIVE) { - $styleArray['mso-position-horizontal'] = $this->style->getPosHorizontal(); - $styleArray['mso-position-vertical'] = $this->style->getPosVertical(); - $styleArray['mso-position-horizontal-relative'] = $this->style->getPosHorizontalRel(); - $styleArray['mso-position-vertical-relative'] = $this->style->getPosVerticalRel(); + $styleArray['mso-position-horizontal'] = $style->getPosHorizontal(); + $styleArray['mso-position-vertical'] = $style->getPosVertical(); + $styleArray['mso-position-horizontal-relative'] = $style->getPosHorizontalRel(); + $styleArray['mso-position-vertical-relative'] = $style->getPosVerticalRel(); $styleArray['margin-left'] = 0; $styleArray['margin-top'] = 0; } @@ -87,18 +81,18 @@ class TextBox extends AbstractStyle $textboxStyle = $this->assembleStyle($styleArray); - $this->xmlWriter->writeAttribute('style', $textboxStyle); + $xmlWriter->writeAttribute('style', $textboxStyle); - $borderSize = $this->style->getBorderSize(); + $borderSize = $style->getBorderSize(); if ($borderSize !== null) { - $this->xmlWriter->writeAttribute('strokeweight', $this->style->getBorderSize().'pt'); + $xmlWriter->writeAttribute('strokeweight', $style->getBorderSize().'pt'); } - $borderColor = $this->style->getBorderColor(); + $borderColor = $style->getBorderColor(); if (empty($borderColor)) { - $this->xmlWriter->writeAttribute('stroked', 'f'); + $xmlWriter->writeAttribute('stroked', 'f'); } else { - $this->xmlWriter->writeAttribute('strokecolor', $borderColor); + $xmlWriter->writeAttribute('strokecolor', $borderColor); } //@todo @@ -111,88 +105,49 @@ class TextBox extends AbstractStyle */ public function writeW10Wrap() { - if (!is_null($this->w10wrap)) { - $this->xmlWriter->startElement('w10:wrap'); - $this->xmlWriter->writeAttribute('type', $this->w10wrap); + $xmlWriter = $this->getXmlWriter(); - switch ($this->style->getPositioning()) { + if (!is_null($this->w10wrap)) { + $xmlWriter->startElement('w10:wrap'); + $xmlWriter->writeAttribute('type', $this->w10wrap); + + switch ($style->getPositioning()) { case TextBoxStyle::POSITION_ABSOLUTE: - $this->xmlWriter->writeAttribute('anchorx', "page"); - $this->xmlWriter->writeAttribute('anchory', "page"); + $xmlWriter->writeAttribute('anchorx', "page"); + $xmlWriter->writeAttribute('anchory', "page"); break; case TextBoxStyle::POSITION_RELATIVE: - switch ($this->style->getPosVerticalRel()) { + switch ($style->getPosVerticalRel()) { case TextBoxStyle::POSITION_RELATIVE_TO_MARGIN: - $this->xmlWriter->writeAttribute('anchory', "margin"); + $xmlWriter->writeAttribute('anchory', "margin"); break; case TextBoxStyle::POSITION_RELATIVE_TO_PAGE: - $this->xmlWriter->writeAttribute('anchory', "page"); + $xmlWriter->writeAttribute('anchory', "page"); break; case TextBoxStyle::POSITION_RELATIVE_TO_TMARGIN: - $this->xmlWriter->writeAttribute('anchory', "margin"); + $xmlWriter->writeAttribute('anchory', "margin"); break; case TextBoxStyle::POSITION_RELATIVE_TO_BMARGIN: - $this->xmlWriter->writeAttribute('anchory', "page"); + $xmlWriter->writeAttribute('anchory', "page"); break; } - switch ($this->style->getPosHorizontalRel()) { + switch ($style->getPosHorizontalRel()) { case TextBoxStyle::POSITION_RELATIVE_TO_MARGIN: - $this->xmlWriter->writeAttribute('anchorx', "margin"); + $xmlWriter->writeAttribute('anchorx', "margin"); break; case TextBoxStyle::POSITION_RELATIVE_TO_PAGE: - $this->xmlWriter->writeAttribute('anchorx', "page"); + $xmlWriter->writeAttribute('anchorx', "page"); break; case TextBoxStyle::POSITION_RELATIVE_TO_LMARGIN: - $this->xmlWriter->writeAttribute('anchorx', "margin"); + $xmlWriter->writeAttribute('anchorx', "margin"); break; case TextBoxStyle::POSITION_RELATIVE_TO_RMARGIN: - $this->xmlWriter->writeAttribute('anchorx', "page"); + $xmlWriter->writeAttribute('anchorx', "page"); break; } } - $this->xmlWriter->endElement(); // w10:wrap + $xmlWriter->endElement(); // w10:wrap } } - - /** - * Get element style - * - * @return array - */ - private function getElementStyle() - { - $styles = array(); - $styleValues = array( - 'width' => $this->style->getWidth(), - 'height' => $this->style->getHeight(), - 'margin-top' => $this->style->getMarginTop(), - 'margin-left' => $this->style->getMarginLeft() - ); - foreach ($styleValues as $key => $value) { - if (!is_null($value) && $value != '') { - $styles[$key] = $value . 'px'; - } - } - - return $styles; - } - - /** - * Assemble style array into style string - * - * @param array $styles - * @return string - */ - private function assembleStyle($styles = array()) - { - $style = ''; - foreach ($styles as $key => $value) { - if (!is_null($value) && $value != '') { - $style .= "{$key}:{$value}; "; - } - } - - return trim($style); - } }