diff --git a/src/PhpWord/Shared/Html.php b/src/PhpWord/Shared/Html.php index 659298ff05..eabd102d61 100644 --- a/src/PhpWord/Shared/Html.php +++ b/src/PhpWord/Shared/Html.php @@ -193,6 +193,7 @@ protected static function parseNode($node, $element, $styles = array(), $data = 'img' => array('Image', $node, $element, $styles, null, null, null), 'br' => array('LineBreak', null, $element, $styles, null, null, null), 'a' => array('Link', $node, $element, $styles, null, null, null), + 'input' => array('Input', $node, $element, $styles, null, null, null), 'hr' => array('HorizRule', $node, $element, $styles, null, null, null), ); @@ -266,6 +267,30 @@ protected static function parseParagraph($node, $element, &$styles) return $newElement; } + /** + * Parse input node + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + * @param array &$styles + */ + protected static function parseInput($node, $element, &$styles) + { + $attributes = $node->attributes; + if (null === $attributes->getNamedItem('type')) { + return; + } + + $inputType = $attributes->getNamedItem('type')->value; + switch ($inputType) { + case 'checkbox': + $checked = ($checked = $attributes->getNamedItem('checked')) && $checked->value === 'true' ? true : false; + $textrun = $element->addTextRun($styles['paragraph']); + $textrun->addFormField('checkbox')->setValue($checked); + break; + } + } + /** * Parse heading node * diff --git a/tests/PhpWord/Shared/HtmlTest.php b/tests/PhpWord/Shared/HtmlTest.php index 43c60f087a..c6061632e2 100644 --- a/tests/PhpWord/Shared/HtmlTest.php +++ b/tests/PhpWord/Shared/HtmlTest.php @@ -639,6 +639,25 @@ public function testParseLetterSpacing() $this->assertEquals(150 * 15, $doc->getElement('/w:document/w:body/w:p/w:r/w:rPr/w:spacing')->getAttribute('w:val')); } + /** + * Tests checkbox input field + */ + public function testInputCheckbox() + { + $phpWord = new \PhpOffice\PhpWord\PhpWord(); + $section = $phpWord->addSection(); + $html = ''; + Html::addHtml($section, $html); + + $doc = TestHelperDOCX::getDocument($phpWord, 'Word2007'); + + $this->assertTrue($doc->elementExists('/w:document/w:body/w:p[1]/w:r/w:fldChar/w:ffData/w:checkBox')); + $this->assertEquals(1, $doc->getElement('/w:document/w:body/w:p[1]/w:r/w:fldChar/w:ffData/w:checkBox/w:checked')->getAttribute('w:val')); + + $this->assertTrue($doc->elementExists('/w:document/w:body/w:p[2]/w:r/w:fldChar/w:ffData/w:checkBox')); + $this->assertEquals(0, $doc->getElement('/w:document/w:body/w:p[2]/w:r/w:fldChar/w:ffData/w:checkBox/w:checked')->getAttribute('w:val')); + } + /** * Parse widths in tables and cells, which also allows for controlling column width */