From 913ac5a4da9daaf5ce716d4cee3e79b76f85201e Mon Sep 17 00:00:00 2001 From: Nextpage <92269411+nxtpge@users.noreply.github.com> Date: Sun, 4 Jun 2023 11:26:11 +0200 Subject: [PATCH] Template : Set a checkbox --- docs/changes/1.x/1.2.0.md | 1 + docs/usage/template.md | 25 +++ mkdocs.yml | 1 + samples/Sample_42_TemplateSetCheckbox.php | 21 +++ ...TLDefault.php => Sample_43_RTLDefault.php} | 0 .../Sample_42_TemplateSetCheckbox.docx | Bin 0 -> 13161 bytes src/PhpWord/TemplateProcessor.php | 21 +++ tests/PhpWordTests/TemplateProcessorTest.php | 153 ++++++++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 samples/Sample_42_TemplateSetCheckbox.php rename samples/{Sample_52_RTLDefault.php => Sample_43_RTLDefault.php} (100%) create mode 100644 samples/resources/Sample_42_TemplateSetCheckbox.docx diff --git a/docs/changes/1.x/1.2.0.md b/docs/changes/1.x/1.2.0.md index 1b8e1daea9..d52fa01e7e 100644 --- a/docs/changes/1.x/1.2.0.md +++ b/docs/changes/1.x/1.2.0.md @@ -29,6 +29,7 @@ - PDF Writer : Added support for PageBreak - PDF Writer : Added callback for modifying the HTML - Added Support for Language, both for document overall and individual text elements +- Template : Set a checkbox by [@nxtpge](https://github.com/nxtpge) in [#2509](https://github.com/PHPOffice/PHPWord/pull/2509) ### Bug fixes diff --git a/docs/usage/template.md b/docs/usage/template.md index 17612357fd..a0c885e75e 100644 --- a/docs/usage/template.md +++ b/docs/usage/template.md @@ -38,6 +38,31 @@ You can also set multiple values by passing all of them in an array. $templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe')); ``` +## setCheckbox + +Given a template containing a checkbox control with the title or tag named: + +``` clean +${checkbox} +``` +The following will check the checkbox: + +``` php +setCheckbox('checkbox', true); +``` + +!!! note annotate "To add a checkbox and set its title or tag in a template" + + 1. Go to **Developer** tab > **Controls** group + 2. Select the **Check Box Content Control** + 3. Right-click on your checkbox + 4. Click on **Properties** + 5. Set the title or the tag + + These steps may change regarding the version of Microsoft Word used. + ## setMacroOpeningChars You can define a custom opening macro. The following will set ``{#`` as the opening search pattern. diff --git a/mkdocs.yml b/mkdocs.yml index 5618dec88c..a58ebfdad6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -55,6 +55,7 @@ nav: - Comment: 'usage/elements/comment.md' - Field: 'usage/elements/field.md' - Footnote & Endnote: 'usage/elements/note.md' + - Formula: 'usage/elements/formula.md' - Image: 'usage/elements/image.md' - Line: 'usage/elements/line.md' - Link: 'usage/elements/link.md' diff --git a/samples/Sample_42_TemplateSetCheckbox.php b/samples/Sample_42_TemplateSetCheckbox.php new file mode 100644 index 0000000000..9386a191b0 --- /dev/null +++ b/samples/Sample_42_TemplateSetCheckbox.php @@ -0,0 +1,21 @@ +setCheckbox('checkbox', true); +$templateProcessor->setCheckbox('checkbox2', false); + +echo date('H:i:s'), ' Saving the result document...', EOL; +$templateProcessor->saveAs(__DIR__ . "/results/{$filename}"); + +echo getEndingNotes(['Word2007' => 'docx'], "results/{$filename}"); +if (!CLI) { + include_once 'Sample_Footer.php'; +} diff --git a/samples/Sample_52_RTLDefault.php b/samples/Sample_43_RTLDefault.php similarity index 100% rename from samples/Sample_52_RTLDefault.php rename to samples/Sample_43_RTLDefault.php diff --git a/samples/resources/Sample_42_TemplateSetCheckbox.docx b/samples/resources/Sample_42_TemplateSetCheckbox.docx new file mode 100644 index 0000000000000000000000000000000000000000..9abc486b697bfe11d0ec3a17f82539d61ead58fa GIT binary patch literal 13161 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 Hzn%R*;!B@5 literal 0 HcmV?d00001 diff --git a/src/PhpWord/TemplateProcessor.php b/src/PhpWord/TemplateProcessor.php index f740212a2c..1ad901d480 100644 --- a/src/PhpWord/TemplateProcessor.php +++ b/src/PhpWord/TemplateProcessor.php @@ -372,6 +372,27 @@ public function setValues(array $values): void } } + public function setCheckbox(string $search, bool $checked): void + { + $search = static::ensureMacroCompleted($search); + $blockType = 'w:sdt'; + + $where = $this->findContainingXmlBlockForMacro($search, $blockType); + if (!is_array($where)) { + return; + } + + $block = $this->getSlice($where['start'], $where['end']); + + $val = $checked ? '1' : '0'; + $block = preg_replace('/()/', '$1"' . $val . '"$2', $block); + + $text = $checked ? '☒' : '☐'; + $block = preg_replace('/().*?(<\/w:t>)/', '$1' . $text . '$2', $block); + + $this->replaceXmlBlock($search, $block, $blockType); + } + /** * @param string $search */ diff --git a/tests/PhpWordTests/TemplateProcessorTest.php b/tests/PhpWordTests/TemplateProcessorTest.php index 843ac798e2..f2d2cfbf13 100644 --- a/tests/PhpWordTests/TemplateProcessorTest.php +++ b/tests/PhpWordTests/TemplateProcessorTest.php @@ -610,6 +610,159 @@ public function testSetValuesWithCustomMacro(): void self::assertStringContainsString('Hello John Doe', $templateProcessor->getMainPart()); } + /** + * @covers ::setCheckbox + */ + public function testSetCheckbox(): void + { + $mainPart = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $result = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $templateProcessor = new TestableTemplateProcesor($mainPart); + $templateProcessor->setCheckbox('checkbox', true); + $templateProcessor->setCheckbox('checkbox2', false); + + self::assertEquals(preg_replace('/>\s+<', $result), preg_replace('/>\s+<', $templateProcessor->getMainPart())); + } + + /** + * @covers ::setCheckbox + */ + public function testSetCheckboxWithCustomMacro(): void + { + $mainPart = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $result = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $templateProcessor = new TestableTemplateProcesor($mainPart); + $templateProcessor->setMacroChars('{#', '#}'); + $templateProcessor->setCheckbox('checkbox', true); + $templateProcessor->setCheckbox('checkbox2', false); + + self::assertEquals(preg_replace('/>\s+<', $result), preg_replace('/>\s+<', $templateProcessor->getMainPart())); + } + /** * @covers ::setImageValue */