Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
41 / 41 |
TwbBundleForm | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
18 | |
100.00% |
41 / 41 |
__invoke(\Zend\Form\FormInterface $oForm = null, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
render(\Zend\Form\FormInterface $oForm, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
100.00% |
1 / 1 |
11 | |
100.00% |
25 / 25 |
|||
setFormClass(\Zend\Form\FormInterface $oForm, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
|||
openTag(\Zend\Form\FormInterface $form = null) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
namespace TwbBundle\Form\View\Helper; | |
class TwbBundleForm extends \Zend\Form\View\Helper\Form | |
{ | |
const LAYOUT_HORIZONTAL = 'horizontal'; | |
const LAYOUT_INLINE = 'inline'; | |
/** | |
* @var string | |
*/ | |
private static $formRowFormat = '<div class="row">%s</div>'; | |
/** | |
* Form layout (see LAYOUT_* consts) | |
* | |
* @var string | |
*/ | |
protected $formLayout = null; | |
/** | |
* @see \Zend\Form\View\Helper\Form::__invoke() | |
* @param \Zend\Form\FormInterface $oForm | |
* @param string $sFormLayout | |
* @return \TwbBundle\Form\View\Helper\TwbBundleForm|string | |
*/ | |
public function __invoke(\Zend\Form\FormInterface $oForm = null, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
{ | |
if ($oForm) { | |
return $this->render($oForm, $sFormLayout); | |
} | |
$this->formLayout = $sFormLayout; | |
return $this; | |
} | |
/** | |
* Render a form from the provided $oForm, | |
* @see \Zend\Form\View\Helper\Form::render() | |
* @param \Zend\Form\FormInterface $oForm | |
* @param string $sFormLayout | |
* @return string | |
*/ | |
public function render(\Zend\Form\FormInterface $oForm, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
{ | |
//Prepare form if needed | |
if (method_exists($oForm, 'prepare')) { | |
$oForm->prepare(); | |
} | |
$this->setFormClass($oForm, $sFormLayout); | |
//Set form role | |
if (!$oForm->getAttribute('role')) { | |
$oForm->setAttribute('role', 'form'); | |
} | |
$bHasColumnSizes = false; | |
$sFormContent = ''; | |
$oRenderer = $this->getView(); | |
foreach($oForm as $oElement){ | |
$aOptions = $oElement->getOptions(); | |
if (!$bHasColumnSizes && !empty($aOptions['column-size'])) { | |
$bHasColumnSizes = true; | |
} | |
//Define layout option to form elements if not already defined | |
if($sFormLayout && empty($aOptions['twb-layout'])){ | |
$aOptions['twb-layout'] = $sFormLayout; | |
$oElement->setOptions($aOptions); | |
} | |
$sFormContent .= $oElement instanceof \Zend\Form\FieldsetInterface?$oRenderer->formCollection($oElement):$oRenderer->formRow($oElement); | |
} | |
if ($bHasColumnSizes && $sFormLayout !== self::LAYOUT_HORIZONTAL) { | |
$sFormContent = sprintf(self::$formRowFormat, $sFormContent); | |
} | |
return $this->openTag($oForm).$sFormContent.$this->closeTag(); | |
} | |
/** | |
* Sets form layout class | |
* | |
* @param \Zend\Form\FormInterface $oForm | |
* @param string $sFormLayout | |
* @return void | |
*/ | |
protected function setFormClass(\Zend\Form\FormInterface $oForm, $sFormLayout = self::LAYOUT_HORIZONTAL) | |
{ | |
if(is_string($sFormLayout)){ | |
$sLayoutClass = 'form-'.$sFormLayout; | |
if ($sFormClass = $oForm->getAttribute('class')) { | |
if (!preg_match('/(\s|^)' . preg_quote($sLayoutClass, '/') . '(\s|$)/', $sFormClass)) { | |
$oForm->setAttribute('class', trim($sFormClass . ' ' . $sLayoutClass)); | |
} | |
} | |
else { | |
$oForm->setAttribute('class', $sLayoutClass); | |
} | |
} | |
} | |
/** | |
* Generate an opening form tag | |
* | |
* @param null|\Zend\Form\FormInterface $form | |
* @return string | |
*/ | |
public function openTag(\Zend\Form\FormInterface $form = null) | |
{ | |
$this->setFormClass($form, $this->formLayout); | |
return parent::openTag($form); | |
} | |
} |