| Conditions | 28 |
| Paths | 1342 |
| Total Lines | 141 |
| Code Lines | 81 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 333 | protected function matchTemplate(NodeList $nodes, FormInterface $form) |
||
| 334 | { |
||
| 335 | // todo injection |
||
| 336 | $translator = $this->formRow->getTranslator(); |
||
| 337 | |||
| 338 | $matched = []; |
||
| 339 | $toRemove = []; |
||
| 340 | $elements = $form->getElements(); |
||
| 341 | |||
| 342 | /* @var $node \WebinoDraw\Dom\Element */ |
||
| 343 | foreach ($nodes as $node) { |
||
| 344 | /** @var \WebinoDraw\Dom\Document $ownerDocument */ |
||
| 345 | $ownerDocument = $node->ownerDocument; |
||
| 346 | |||
| 347 | $nodePath = $node->getNodePath(); |
||
| 348 | $elementNodes = $ownerDocument->getXpath()->query('.//*[@name]', $node); |
||
| 349 | /* @var $elementNode \WebinoDraw\Dom\Element */ |
||
| 350 | foreach ($elementNodes as $elementNode) { |
||
| 351 | |||
| 352 | $elementName = $elementNode->getAttribute('name'); |
||
| 353 | $matched[$elementName] = true; |
||
| 354 | |||
| 355 | if (!$form->has($elementName)) { |
||
| 356 | // remove node of the missing form element |
||
| 357 | $parentNode = $elementNode->parentNode; |
||
| 358 | if ('label' === $parentNode->nodeName) { |
||
| 359 | $parentNode->parentNode->removeChild($parentNode); |
||
| 360 | } else { |
||
| 361 | $toRemove[$nodePath][] = $elementName; |
||
| 362 | $elementNode->parentNode->removeChild($elementNode); |
||
| 363 | } |
||
| 364 | continue; |
||
| 365 | } |
||
| 366 | |||
| 367 | $elementNode->setAttribute('id', $elementName); |
||
| 368 | |||
| 369 | /* @var $element \Zend\Form\Element */ |
||
| 370 | $element = $form->get($elementName); |
||
| 371 | $attributes = $element->getAttributes(); |
||
| 372 | |||
| 373 | // TODO remaining elements |
||
| 374 | if (isset($attributes['type'])) { |
||
| 375 | switch ($attributes['type']) { |
||
| 376 | case 'checkbox': |
||
| 377 | /* @var $element \Zend\Form\Element\Checkbox */ |
||
| 378 | $attributes['value'] = $element->getCheckedValue(); |
||
| 379 | // todo checkbox use hidden element |
||
| 380 | break; |
||
| 381 | case 'multi_checkbox': |
||
| 382 | case 'select': |
||
| 383 | $selectNode = $ownerDocument->createDocumentFragment(); |
||
| 384 | $selectNode->appendXml($this->formRow->__invoke($element)); |
||
| 385 | $elementNode = $elementNode->parentNode->replaceChild($selectNode, $elementNode); |
||
| 386 | unset($selectNode); |
||
| 387 | break; |
||
| 388 | |||
| 389 | case 'text': |
||
| 390 | case 'email': |
||
| 391 | case 'submit': |
||
| 392 | case 'reset': |
||
| 393 | case 'button': |
||
| 394 | |||
| 395 | // set element node value if available |
||
| 396 | $value = $elementNode->hasAttribute('value') |
||
| 397 | ? $elementNode->getAttribute('value') |
||
| 398 | : $element->getValue(); |
||
| 399 | |||
| 400 | $attributes['value'] = !empty($value) ? $translator->translate($value) : ''; |
||
| 401 | unset($value); |
||
| 402 | break; |
||
| 403 | } |
||
| 404 | } |
||
| 405 | |||
| 406 | $subElementNodes = $nodes->create([$elementNode]); |
||
| 407 | $subElementNodes->setAttribs($attributes); |
||
| 408 | |||
| 409 | // labels |
||
| 410 | $subElementNodes->each( |
||
| 411 | 'xpath=../span[name(..)="label"]|..//label[@for="' . $elementName . '"]', |
||
| 412 | function ($nodes) use ($element, $translator) { |
||
| 413 | $label = $translator->translate($element->getLabel()); |
||
| 414 | |||
| 415 | /* @var $subNode \WebinoDraw\Dom\Element */ |
||
| 416 | foreach ($nodes as $subNode) { |
||
| 417 | $subNode->nodeValue = !$subNode->isEmpty() |
||
| 418 | ? $translator->translate($subNode->nodeValue) |
||
| 419 | : $label; |
||
| 420 | } |
||
| 421 | } |
||
| 422 | ); |
||
| 423 | |||
| 424 | // errors |
||
| 425 | $messages = $element->getMessages(); |
||
| 426 | if (!empty($messages)) { |
||
| 427 | |||
| 428 | $errorNode = $ownerDocument->createDocumentFragment(); |
||
| 429 | $errorNode->appendXml($this->formElementErrors->__invoke($element)); |
||
| 430 | |||
| 431 | foreach ($subElementNodes as $subElementNode) { |
||
| 432 | if (empty($subElementNode->nextSibling)) { |
||
| 433 | $subElementNode->parentNode->appendChild($errorNode); |
||
| 434 | } else { |
||
| 435 | $subElementNode->parentNode->insertBefore($errorNode, $subElementNode); |
||
| 436 | } |
||
| 437 | } |
||
| 438 | } |
||
| 439 | } |
||
| 440 | |||
| 441 | // auto draw hidden nodes |
||
| 442 | /** @var \Zend\Form\Element $element */ |
||
| 443 | foreach ($elements as $element) { |
||
| 444 | $attributes = $element->getAttributes(); |
||
| 445 | if (empty($attributes['type']) |
||
| 446 | || 'hidden' !== $attributes['type'] |
||
| 447 | ) { |
||
| 448 | continue; |
||
| 449 | } |
||
| 450 | |||
| 451 | // skip matched elements |
||
| 452 | if (isset($matched[$attributes['name']])) { |
||
| 453 | continue; |
||
| 454 | } |
||
| 455 | |||
| 456 | $hiddenNode = $ownerDocument->createDocumentFragment(); |
||
| 457 | $xhtml = (string) $this->formRow->__invoke($element); |
||
| 458 | |||
| 459 | $hiddenNode->appendXml($xhtml); |
||
| 460 | if (!$hiddenNode->hasChildNodes()) { |
||
| 461 | throw new Exception\RuntimeException('Invalid XHTML ' . $xhtml); |
||
| 462 | } |
||
| 463 | $node->appendChild($hiddenNode); |
||
| 464 | } |
||
| 465 | } |
||
| 466 | |||
| 467 | // remove labels of missing elements |
||
| 468 | foreach ($toRemove as $nodePath => $elementNames) { |
||
| 469 | foreach ($elementNames as $elementName) { |
||
| 470 | $nodes->remove('xpath=' . $nodePath . '//label[@for="' . $elementName . '"]'); |
||
| 471 | } |
||
| 472 | } |
||
| 473 | } |
||
| 474 | } |
||
| 475 |