Refactoring for code quality improvement (based on Scrutinizer)

This commit is contained in:
Ivan Lanin 2014-05-06 22:08:39 +07:00
parent 1f5e58a317
commit c4e8fdac84
4 changed files with 182 additions and 141 deletions

View File

@ -138,7 +138,7 @@ class Title extends AbstractElement
*/
public function setAnchor($anchor)
{
$anchor = null;
$this->anchor = $anchor;
}
/**

View File

@ -441,4 +441,40 @@ class Table extends Border
return $this;
}
/**
* Has borders?
*
* @return bool
*/
public function hasBorders()
{
$hasBorders = false;
$borders = $this->getBorderSize();
for ($i = 0; $i < 6; $i++) {
if (!is_null($borders[$i])) {
$hasBorders = true;
}
}
return $hasBorders;
}
/**
* Has margins?
*
* @return bool
*/
public function hasMargins()
{
$hasMargins = false;
$margins = $this->getCellMargin();
for ($i = 0; $i < 4; $i++) {
if (!is_null($margins[$i])) {
$hasMargins = true;
}
}
return $hasMargins;
}
}

View File

@ -35,18 +35,96 @@ class TOC extends Element
public function write()
{
$titles = $this->element->getTitles();
$writeFieldMark = true;
foreach ($titles as $title) {
$this->writeTitle($title, $writeFieldMark);
if ($writeFieldMark) {
$writeFieldMark = false;
}
}
$this->xmlWriter->startElement('w:p');
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'end');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
}
/**
* Write title
*/
private function writeTitle($title, $writeFieldMark)
{
$tocStyle = $this->element->getStyleTOC();
$fontStyle = $this->element->getStyleFont();
$isObject = ($fontStyle instanceof Font) ? true : false;
$anchor = '_Toc' . ($title->getBookmarkId() + 252634154);
$indent = ($title->getDepth() - 1) * $tocStyle->getIndent();
$this->xmlWriter->startElement('w:p');
// Write style and field mark
$this->writeStyle($indent);
if ($writeFieldMark) {
$this->writeFieldMark();
}
// Hyperlink
$this->xmlWriter->startElement('w:hyperlink');
$this->xmlWriter->writeAttribute('w:anchor', $anchor);
$this->xmlWriter->writeAttribute('w:history', '1');
// Title text
$this->xmlWriter->startElement('w:r');
if ($isObject) {
$styleWriter = new FontStyleWriter($this->xmlWriter, $fontStyle);
$styleWriter->write();
}
$this->xmlWriter->startElement('w:t');
$this->xmlWriter->writeRaw($title->getText());
$this->xmlWriter->endElement();
$this->xmlWriter->endElement(); // w:r
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->writeElement('w:tab', null);
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'begin');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:instrText');
$this->xmlWriter->writeAttribute('xml:space', 'preserve');
$this->xmlWriter->writeRaw('PAGEREF ' . $anchor . ' \h');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'end');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->endElement(); // w:hyperlink
$this->xmlWriter->endElement(); // w:p
}
/**
* Write style
*/
private function writeStyle($indent)
{
$tocStyle = $this->element->getStyleTOC();
$fontStyle = $this->element->getStyleFont();
$isObject = ($fontStyle instanceof Font) ? true : false;
$tocFieldWritten = false;
foreach ($titles as $title) {
$indent = ($title->getDepth() - 1) * $tocStyle->getIndent();
$anchor = '_Toc' . ($title->getBookmarkId() + 252634154);
$this->xmlWriter->startElement('w:p');
// Style
$this->xmlWriter->startElement('w:pPr');
// Paragraph
@ -78,9 +156,13 @@ class TOC extends Element
}
$this->xmlWriter->endElement(); // w:pPr
}
if ($tocFieldWritten !== true) {
$tocFieldWritten = true;
/**
* Write TOC Field
*/
private function writeFieldMark()
{
$minDepth = $this->element->getMinDepth();
$maxDepth = $this->element->getMaxDepth();
@ -103,57 +185,4 @@ class TOC extends Element
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
}
$this->xmlWriter->startElement('w:hyperlink');
$this->xmlWriter->writeAttribute('w:anchor', $anchor);
$this->xmlWriter->writeAttribute('w:history', '1');
$this->xmlWriter->startElement('w:r');
if ($isObject) {
$styleWriter = new FontStyleWriter($this->xmlWriter, $fontStyle);
$styleWriter->write();
}
$this->xmlWriter->startElement('w:t');
$this->xmlWriter->writeRaw($title->getText());
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->writeElement('w:tab', null);
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'begin');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:instrText');
$this->xmlWriter->writeAttribute('xml:space', 'preserve');
$this->xmlWriter->writeRaw('PAGEREF ' . $anchor . ' \h');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'end');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->endElement(); // w:hyperlink
$this->xmlWriter->endElement(); // w:p
}
$this->xmlWriter->startElement('w:p');
$this->xmlWriter->startElement('w:r');
$this->xmlWriter->startElement('w:fldChar');
$this->xmlWriter->writeAttribute('w:fldCharType', 'end');
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
$this->xmlWriter->endElement();
}
}

View File

@ -40,30 +40,14 @@ class Table extends AbstractStyle
return;
}
$brdCol = $this->style->getBorderColor();
$brdSz = $this->style->getBorderSize();
$cellMargin = $this->style->getCellMargin();
$hasBorders = $this->style->hasBorders();
$hasMargins = $this->style->hasMargins();
// If any of the borders/margins is set, process them
$hasBorders = false;
for ($i = 0; $i < 6; $i++) {
if (!is_null($brdSz[$i])) {
$hasBorders = true;
break;
}
}
$hasMargins = false;
for ($i = 0; $i < 4; $i++) {
if (!is_null($cellMargin[$i])) {
$hasMargins = true;
break;
}
}
if ($hasMargins || $hasBorders) {
$this->xmlWriter->startElement('w:tblPr');
if ($hasMargins) {
$mbWriter = new MarginBorder($this->xmlWriter);
$mbWriter->setSizes($cellMargin);
$mbWriter->setSizes($this->style->getCellMargin());
$this->xmlWriter->startElement('w:tblCellMar');
$mbWriter->write();
@ -71,8 +55,8 @@ class Table extends AbstractStyle
}
if ($hasBorders) {
$mbWriter = new MarginBorder($this->xmlWriter);
$mbWriter->setSizes($brdSz);
$mbWriter->setColors($brdCol);
$mbWriter->setSizes($this->style->getBorderSize());
$mbWriter->setColors($this->style->getBorderColor());
$this->xmlWriter->startElement('w:tblBorders');
$mbWriter->write();
@ -123,18 +107,10 @@ class Table extends AbstractStyle
}
// Borders
$brdSz = $style->getBorderSize();
$brdCol = $style->getBorderColor();
$hasBorders = false;
for ($i = 0; $i < 6; $i++) {
if (!is_null($brdSz[$i])) {
$hasBorders = true;
}
}
if ($hasBorders) {
if ($style->hasBorders()) {
$mbWriter = new MarginBorder($this->xmlWriter);
$mbWriter->setSizes($brdSz);
$mbWriter->setColors($brdCol);
$mbWriter->setSizes($style->getBorderSize());
$mbWriter->setColors($style->getBorderColor());
$this->xmlWriter->startElement('w:tcBorders');
$mbWriter->write();