| 
<?php/**
 * User: delboy1978uk
 * Date: 29/11/2016
 * Time: 19:44
 */
 
 namespace Del\Form\Renderer;
 
 use Del\Form\Renderer\Error\HorizontalFormErrorRender;
 use DOMElement;
 use DOMNode;
 use DOMText;
 
 class HorizontalFormRenderer extends AbstractFormRenderer implements FormRendererInterface
 {
 public function __construct()
 {
 parent::__construct();
 
 // Add horizontal form class
 $this->form->setAttribute('class', 'form-horizontal');
 $this->errorRenderer = new HorizontalFormErrorRender($this->getDom());
 }
 
 /**
 * @return DOMElement
 */
 public function renderFieldLabel()
 {
 $label = $this->createLabelElement();
 $label->setAttribute('class', 'col-sm-2 control-label');
 $text = $this->createText($this->field->getLabel());
 $label->appendChild($text);
 return $label;
 }
 
 /**
 * @return DOMElement
 */
 public function renderFieldBlock()
 {
 $class = $this->block->getAttribute('class').'form-group';
 $this->block->setAttribute('class', $class);
 
 $div = $this->createElement('div');
 $div->setAttribute('class', 'col-sm-10');
 
 $this->processField($div);
 
 $this->block->appendChild($div);
 
 if (!is_null($this->errors)) {
 $this->block->appendChild($this->errors);
 }
 
 return $this->block;
 }
 
 /**
 * @param DOMElement $div
 */
 private function processField(DOMElement $div)
 {
 switch (get_class($this->field)) {
 case 'Del\Form\Field\Submit':
 $div->appendChild($this->element);
 $div->setAttribute('class', 'col-sm-offset-2 col-sm-10');
 break;
 case 'Del\Form\Field\Radio':
 $radioDiv = $this->surroundInDiv($this->element, 'radio');
 $this->block->appendChild($this->label);
 $div->appendChild($radioDiv);
 break;
 case 'Del\Form\Field\CheckBox':
 $checkboxDiv = $this->surroundInDiv($this->element, 'checkbox');
 $this->block->appendChild($this->label);
 $div->appendChild($checkboxDiv);
 break;
 default:
 $this->block->appendChild($this->label);
 $div->appendChild($this->element);
 }
 }
 
 /**
 * Surround an element in a div with a given class
 *
 * @param DOMNode $element
 * @param $class
 * @return DOMElement
 */
 private function surroundInDiv(DOMNode $element, $class)
 {
 $div = $this->createElement('div');
 $div->setAttribute('class', $class);
 $div->appendChild($element);
 return $div;
 }
 
 }
 |