Skip to content

Commit a821c13

Browse files
vincentKoolProgi1984
authored andcommitted
Fixed code style issues and added a testcase for reading a FormField of type checkbox
1 parent 9d2a5ee commit a821c13

File tree

2 files changed

+105
-58
lines changed

2 files changed

+105
-58
lines changed

src/PhpWord/Reader/Word2007/AbstractPart.php

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -206,26 +206,25 @@ protected function readParagraph(XMLReader $xmlReader, DOMElement $domNode, $par
206206
$nodes = $xmlReader->getElements('*', $domNode);
207207
$paragraph = $parent->addTextRun($paragraphStyle);
208208
foreach ($nodes as $node) {
209-
if($xmlReader->elementExists('w:fldChar/w:ffData', $node)) {
209+
if ($xmlReader->elementExists('w:fldChar/w:ffData', $node)) {
210210
$partOfFormField = true;
211211
$formNodes[] = $node;
212-
if($xmlReader->elementExists('w:fldChar/w:ffData/w:ddList', $node)) {
213-
$formType = "dropdown";
212+
if ($xmlReader->elementExists('w:fldChar/w:ffData/w:ddList', $node)) {
213+
$formType = 'dropdown';
214214
} elseif ($xmlReader->elementExists('w:fldChar/w:ffData/w:textInput', $node)) {
215-
$formType = "textinput";
215+
$formType = 'textinput';
216216
} elseif ($xmlReader->elementExists('w:fldChar/w:ffData/w:checkBox', $node)) {
217-
$formType = "checkbox";
217+
$formType = 'checkbox';
218218
}
219-
} elseif (
220-
$partOfFormField &&
219+
} elseif ($partOfFormField &&
221220
$xmlReader->elementExists('w:fldChar', $node) &&
222-
"end" == $xmlReader->getAttribute('w:fldCharType', $node, 'w:fldChar')
221+
'end' == $xmlReader->getAttribute('w:fldCharType', $node, 'w:fldChar')
223222
) {
224223
$formNodes[] = $node;
225224
$partOfFormField = false;
226225
// Process the form fields
227226
$this->readFormField($xmlReader, $formNodes, $paragraph, $docPart, $paragraphStyle, $formType);
228-
} elseif ($partOfFormField){
227+
} elseif ($partOfFormField) {
229228
$formNodes[] = $node;
230229
} else {
231230
// normal runs
@@ -330,33 +329,34 @@ protected function readParagraph(XMLReader $xmlReader, DOMElement $domNode, $par
330329
* @param string $docPart
331330
* @param null $paragraphStyle
332331
* @param string $formType
333-
* @return void
334332
*/
335-
private function readFormField(XMLReader $xmlReader, array $domNodes, $parent, $docPart = 'document', $paragraphStyle = null, $formType)
333+
private function readFormField(XMLReader $xmlReader, array $domNodes, $parent, $docPart, $paragraphStyle, $formType)
336334
{
337-
if(!in_array($formType, array("textinput", "checkbox", "dropdown"))) return;
335+
if (!in_array($formType, array('textinput', 'checkbox', 'dropdown'))) {
336+
return;
337+
}
338338

339339
$formField = $parent->addFormField($formType, null, $paragraphStyle);
340-
$ffData = $xmlReader->getElement("w:fldChar/w:ffData", $domNodes[0]);
340+
$ffData = $xmlReader->getElement('w:fldChar/w:ffData', $domNodes[0]);
341341

342-
foreach ($xmlReader->getElements("*", $ffData) as $node) {
342+
foreach ($xmlReader->getElements('*', $ffData) as $node) {
343343
/** @var \DOMElement $node */
344344
switch ($node->localName) {
345-
case "name":
346-
$formField->setName($node->getAttribute("w:val"));
345+
case 'name':
346+
$formField->setName($node->getAttribute('w:val'));
347347
break;
348-
case "ddList":
348+
case 'ddList':
349349
$listEntries = array();
350-
foreach ($xmlReader->getElements("*", $node) as $ddListNode) {
350+
foreach ($xmlReader->getElements('*', $node) as $ddListNode) {
351351
switch ($ddListNode->localName) {
352-
case "result":
353-
$formField->setValue($xmlReader->getAttribute("w:val", $ddListNode));
352+
case 'result':
353+
$formField->setValue($xmlReader->getAttribute('w:val', $ddListNode));
354354
break;
355-
case "default":
356-
$formField->setDefault($xmlReader->getAttribute("w:val", $ddListNode));
355+
case 'default':
356+
$formField->setDefault($xmlReader->getAttribute('w:val', $ddListNode));
357357
break;
358-
case "listEntry":
359-
$listEntries[] = $xmlReader->getAttribute("w:val", $ddListNode);
358+
case 'listEntry':
359+
$listEntries[] = $xmlReader->getAttribute('w:val', $ddListNode);
360360
break;
361361
}
362362
}
@@ -365,40 +365,39 @@ private function readFormField(XMLReader $xmlReader, array $domNodes, $parent, $
365365
$formField->setText($listEntries[$formField->getValue()]);
366366
}
367367
break;
368-
case "textInput":
369-
foreach ($xmlReader->getElements("*", $node) as $ddListNode) {
368+
case 'textInput':
369+
foreach ($xmlReader->getElements('*', $node) as $ddListNode) {
370370
switch ($ddListNode->localName) {
371-
case "default":
372-
$formField->setDefault($xmlReader->getAttribute("w:val", $ddListNode));
371+
case 'default':
372+
$formField->setDefault($xmlReader->getAttribute('w:val', $ddListNode));
373373
break;
374-
case "format":
375-
case "maxLength":
374+
case 'format':
375+
case 'maxLength':
376376
break;
377377
}
378378
}
379379
break;
380-
case "checkBox":
381-
foreach ($xmlReader->getElements("*", $node) as $ddListNode) {
382-
380+
case 'checkBox':
381+
foreach ($xmlReader->getElements('*', $node) as $ddListNode) {
383382
switch ($ddListNode->localName) {
384-
case "default":
385-
$formField->setDefault($xmlReader->getAttribute("w:val", $ddListNode));
383+
case 'default':
384+
$formField->setDefault($xmlReader->getAttribute('w:val', $ddListNode));
386385
break;
387-
case "checked":
388-
$formField->setValue($xmlReader->getAttribute("w:val", $ddListNode));
386+
case 'checked':
387+
$formField->setValue($xmlReader->getAttribute('w:val', $ddListNode));
389388
break;
390-
case "size":
391-
case "sizeAuto":
389+
case 'size':
390+
case 'sizeAuto':
392391
break;
393392
}
394393
}
395394
break;
396395
}
397396
}
398397

399-
if ("textinput" == $formType) {
398+
if ('textinput' == $formType) {
400399
$ignoreText = true;
401-
$textContent = "";
400+
$textContent = '';
402401
foreach ($domNodes as $node) {
403402
if ($xmlReader->elementExists('w:fldChar', $node)) {
404403
$fldCharType = $xmlReader->getAttribute('w:fldCharType', $node, 'w:fldChar');
@@ -418,7 +417,6 @@ private function readFormField(XMLReader $xmlReader, array $domNodes, $parent, $
418417
}
419418
}
420419

421-
422420
/**
423421
* Returns the depth of the Heading, returns 0 for a Title
424422
*

tests/PhpWordTests/Reader/Word2007/ElementTest.php

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ public function testReadDrawing(): void
356356
self::assertInstanceOf('PhpOffice\PhpWord\Element\TextRun', $elements[0]);
357357
}
358358

359-
360359
/**
361360
* Test reading FormField - DROPDOWN
362361
*/
@@ -413,19 +412,16 @@ public function testReadFormFieldDropdown()
413412
$subElements = $elements[0]->getElements();
414413

415414
$this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $subElements[0]);
416-
$this->assertEquals("Reference", $subElements[0]->getText());
415+
$this->assertEquals('Reference', $subElements[0]->getText());
417416

418417
$this->assertInstanceOf('PhpOffice\PhpWord\Element\FormField', $subElements[1]);
419-
$this->assertEquals("dropdown", $subElements[1]->getType());
420-
$this->assertEquals("DropDownList1", $subElements[1]->getName());
421-
$this->assertEquals("2", $subElements[1]->getValue());
422-
$this->assertEquals("Option Two", $subElements[1]->getText());
423-
$this->assertEquals(array("TBD", "Option One", "Option Two", "Option Three", "Other"), $subElements[1]->getEntries());
424-
418+
$this->assertEquals('dropdown', $subElements[1]->getType());
419+
$this->assertEquals('DropDownList1', $subElements[1]->getName());
420+
$this->assertEquals('2', $subElements[1]->getValue());
421+
$this->assertEquals('Option Two', $subElements[1]->getText());
422+
$this->assertEquals(array('TBD', 'Option One', 'Option Two', 'Option Three', 'Other'), $subElements[1]->getEntries());
425423
}
426424

427-
428-
429425
/**
430426
* Test reading FormField - textinput
431427
*/
@@ -485,13 +481,66 @@ public function testReadFormFieldTextinput()
485481
$subElements = $elements[0]->getElements();
486482

487483
$this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $subElements[0]);
488-
$this->assertEquals("Fieldname", $subElements[0]->getText());
484+
$this->assertEquals('Fieldname', $subElements[0]->getText());
489485

490486
$this->assertInstanceOf('PhpOffice\PhpWord\Element\FormField', $subElements[1]);
491-
$this->assertEquals("textinput", $subElements[1]->getType());
492-
$this->assertEquals("TextInput2", $subElements[1]->getName());
493-
$this->assertEquals("This is some sample text", $subElements[1]->getValue());
494-
$this->assertEquals("This is some sample text", $subElements[1]->getText());
487+
$this->assertEquals('textinput', $subElements[1]->getType());
488+
$this->assertEquals('TextInput2', $subElements[1]->getName());
489+
$this->assertEquals('This is some sample text', $subElements[1]->getValue());
490+
$this->assertEquals('This is some sample text', $subElements[1]->getText());
495491
}
496492

497-
}
493+
/**
494+
* Test reading FormField - checkbox
495+
*/
496+
public function testReadFormFieldCheckbox()
497+
{
498+
$documentXml = '<w:p>
499+
<w:pPr/>
500+
<w:r>
501+
<w:fldChar w:fldCharType="begin">
502+
<w:ffData>
503+
<w:enabled w:val="1"/>
504+
<w:name w:val="SomeCheckbox"/>
505+
<w:calcOnExit w:val="0"/>
506+
<w:checkBox>
507+
<w:sizeAuto w:val=""/>
508+
<w:default w:val="0"/>
509+
<w:checked w:val="0"/>
510+
</w:checkBox>
511+
</w:ffData>
512+
</w:fldChar>
513+
</w:r>
514+
<w:r>
515+
<w:rPr/>
516+
<w:instrText xml:space="preserve">FORMCHECKBOX</w:instrText>
517+
</w:r>
518+
<w:r>
519+
<w:rPr/>
520+
<w:fldChar w:fldCharType="separate"/>
521+
</w:r>
522+
<w:r>
523+
<w:rPr/>
524+
<w:t xml:space="preserve"> </w:t>
525+
</w:r>
526+
<w:r>
527+
<w:rPr/>
528+
<w:fldChar w:fldCharType="end"/>
529+
</w:r>
530+
</w:p>';
531+
532+
$phpWord = $this->getDocumentFromString(array('document' => $documentXml));
533+
534+
$elements = $phpWord->getSection(0)->getElements();
535+
$this->assertInstanceOf('PhpOffice\PhpWord\Element\TextRun', $elements[0]);
536+
537+
$subElements = $elements[0]->getElements();
538+
539+
// $this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $subElements[0]);
540+
// $this->assertEquals('Fieldname', $subElements[0]->getText());
541+
542+
$this->assertInstanceOf('PhpOffice\PhpWord\Element\FormField', $subElements[0]);
543+
$this->assertEquals('checkbox', $subElements[0]->getType());
544+
$this->assertEquals('SomeCheckbox', $subElements[0]->getName());
545+
}
546+
}

0 commit comments

Comments
 (0)