Skip to content

Commit

Permalink
Merge pull request PHPOffice#1832 from Matze2010/udz-checkbox-feature
Browse files Browse the repository at this point in the history
Add parsing of HTML checkbox input field
  • Loading branch information
troosan committed Feb 12, 2021
2 parents 4c5e760 + 659d3d7 commit c2e2ec4
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/PhpWord/Shared/Html.php
Original file line number Diff line number Diff line change
Expand Up @@ -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),
);

Expand Down Expand Up @@ -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
*
Expand Down
19 changes: 19 additions & 0 deletions tests/PhpWord/Shared/HtmlTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '<input type="checkbox" checked="true" /><input type="checkbox" />';
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
*/
Expand Down

0 comments on commit c2e2ec4

Please sign in to comment.