add parameter to keep backward compatibility + add test

This commit is contained in:
troosan 2018-12-27 01:44:37 +01:00
parent 1bcef04ddc
commit 75620caf51
3 changed files with 49 additions and 7 deletions

View File

@ -12,6 +12,7 @@ v0.16.0 (xx dec 2018)
- Add support for hidden text @Alexmg86 #1527 - Add support for hidden text @Alexmg86 #1527
- Add support for setting images in TemplateProcessor @SailorMax #1170 - Add support for setting images in TemplateProcessor @SailorMax #1170
- Add "Plain Text" type to SDT (Structured Document Tags) @morrisdj #1541 - Add "Plain Text" type to SDT (Structured Document Tags) @morrisdj #1541
- Added possibility to index variables inside cloned block in TemplateProcessor @JPBetley #817
### Fixed ### Fixed
- Fix regex in `cloneBlock` function @nicoder #1269 - Fix regex in `cloneBlock` function @nicoder #1269

View File

@ -629,12 +629,13 @@ class TemplateProcessor
* Clone a block. * Clone a block.
* *
* @param string $blockname * @param string $blockname
* @param int $clones * @param int $clones How many time the block should be cloned
* @param bool $replace * @param bool $replace
* @param bool $indexVariables If true, any variables inside the block will be indexed (postfixed with #1, #2, ...)
* *
* @return string|null * @return string|null
*/ */
public function cloneBlock($blockname, $clones = 1, $replace = true) public function cloneBlock($blockname, $clones = 1, $replace = true, $indexVariables = false)
{ {
$xmlBlock = null; $xmlBlock = null;
preg_match( preg_match(
@ -645,7 +646,14 @@ class TemplateProcessor
if (isset($matches[3])) { if (isset($matches[3])) {
$xmlBlock = $matches[3]; $xmlBlock = $matches[3];
$cloned = $this->indexClonedVariables($clones, $xmlBlock); if ($indexVariables) {
$cloned = $this->indexClonedVariables($clones, $xmlBlock);
} else {
$cloned = array();
for ($i = 1; $i <= $clones; $i++) {
$cloned[] = $xmlBlock;
}
}
if ($replace) { if ($replace) {
$this->tempDocumentMainPart = str_replace( $this->tempDocumentMainPart = str_replace(
@ -938,7 +946,7 @@ class TemplateProcessor
* Replaces variable names in cloned * Replaces variable names in cloned
* rows/blocks with indexed names * rows/blocks with indexed names
* *
* @param integer $count * @param int $count
* @param string $xmlBlock * @param string $xmlBlock
* *
* @return string * @return string
@ -949,6 +957,7 @@ class TemplateProcessor
for ($i = 1; $i <= $count; $i++) { for ($i = 1; $i <= $count; $i++) {
$results[] = preg_replace('/\$\{(.*?)\}/', '\${\\1#' . $i . '}', $xmlBlock); $results[] = preg_replace('/\$\{(.*?)\}/', '\${\\1#' . $i . '}', $xmlBlock);
} }
return $results; return $results;
} }
} }

View File

@ -409,7 +409,7 @@ final class TemplateProcessorTest extends \PHPUnit\Framework\TestCase
</w:p> </w:p>
<w:p> <w:p>
<w:r> <w:r>
<w:t xml:space="preserve">This block will be cloned</w:t> <w:t xml:space="preserve">This block will be cloned with ${variable}</w:t>
</w:r> </w:r>
</w:p> </w:p>
<w:p> <w:p>
@ -421,7 +421,39 @@ final class TemplateProcessorTest extends \PHPUnit\Framework\TestCase
$templateProcessor = new TestableTemplateProcesor($mainPart); $templateProcessor = new TestableTemplateProcesor($mainPart);
$templateProcessor->cloneBlock('CLONEME', 3); $templateProcessor->cloneBlock('CLONEME', 3);
$this->assertEquals(3, substr_count($templateProcessor->getMainPart(), 'This block will be cloned')); $this->assertEquals(3, substr_count($templateProcessor->getMainPart(), 'This block will be cloned with ${variable}'));
}
/**
* @covers ::cloneBlock
* @test
*/
public function testCloneBlockWithVariables()
{
$mainPart = '<?xml version="1.0" encoding="UTF-8"?>
<w:p>
<w:r>
<w:rPr></w:rPr>
<w:t>${CLONEME}</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t xml:space="preserve">Address ${address}, Street ${street}</w:t>
</w:r>
</w:p>
<w:p>
<w:r w:rsidRPr="00204FED">
<w:t>${/CLONEME}</w:t>
</w:r>
</w:p>';
$templateProcessor = new TestableTemplateProcesor($mainPart);
$templateProcessor->cloneBlock('CLONEME', 3, true, true);
$this->assertContains('Address ${address#1}, Street ${street#1}', $templateProcessor->getMainPart());
$this->assertContains('Address ${address#2}, Street ${street#2}', $templateProcessor->getMainPart());
$this->assertContains('Address ${address#3}, Street ${street#3}', $templateProcessor->getMainPart());
} }
/** /**