Current File : /home/aventura/www/site/wp-content/plugins/victheme_core/vtcore/bootstrap/form/base.php |
<?php
/**
* Bootstrap Form Base, the superclass for building the
* Bootstrap compatible form with its element.
*
* The difference between this and the form base is
* this form added several automatic processor for
* assigning context from the wrapper context into the
* actual input element context and additional processor
* for handling the form value as well.
*
* @method string BsCheckbox() Method for building checkbox element
* @method string BsColor() Method for building color element
* @method string BsDescription() Method for building description element
* @method string BsGlyphicon() Method for building glyphicon element
* @method string BsInstance() Method for building Form instance element
* @method string BsNumber() Method for building input number element
* @method string BsPrefix() Method for building prefix element
* @method string BsRadios() Method for building radio element
* @method string BsSelect() Method for building select element
* @method string BsSuffix() Method for building suffix elementt
* @method string BsText() Method for building input text object
* @method string BsTextarea() Method for building textarea object
* @method string BsUrl() Method for building Url input element
*
* @author jason.xie@victheme.com
*/
class VTCore_Bootstrap_Form_Base
extends VTCore_Form_Base {
protected $overloaderPrefix = array(
'VTCore_Bootstrap_Form_',
'VTCore_Bootstrap_Element_',
'VTCore_Bootstrap_Grid_',
'VTCore_Form_',
'VTCore_Html_',
);
private $shortcutAttributes = array(
'required',
'size',
'maxlength',
'placeholder',
'name',
'value',
'id',
'class',
'cols',
'rows',
'size',
'multiple',
'min',
'max',
'step',
'checked',
'disabled',
'autocomplete',
);
// Default error context for building bootstrap form error element
protected $errorsContext = array(
'errorClass' => 'has-error',
'feedbackIcon' => 'remove',
'messageClass' => 'alert-danger',
);
/**
* Constructing the object and processing
* the context array
*/
public function __construct($context = array()) {
$this->buildObject($context);
$this->assignContext();
$this->buildElement();
$this->buildValidator();
}
protected function changeClass($old, $new) {
$context = $this->getContext('attributes');
if (isset($context['class'])) {
foreach ($context['class'] as $key => $class) {
if ($class == $old) {
unset($context['class'][$key]);
$context['class'][] = $new;
}
}
}
$this->context['attributes']['class'] = $context['class'];
return $this;
}
protected function assignContext() {
if ($this->getContext('id') == FALSE) {
$this->setContext(array(
'id' => 'element-' . $this->getMachineID(),
));
}
if ($this->getContext('text')) {
$this->addContext('label_elements.text', $this->getContext('text'));
}
if ($this->getContext('prefix')) {
$this->changeClass('form-group', 'input-group');
$this->addContext('prefix_elements.text', $this->getContext('prefix'));
}
if ($this->getContext('suffix')) {
$this->changeClass('form-group', 'input-group');
$this->addContext('suffix_elements.text', $this->getContext('suffix'));
}
if ($this->getContext('description')) {
$this->addContext('description_elements.text', $this->getContext('description'));
}
if ($this->getContext('required')) {
$this->addContext('label_elements.required', $this->getContext('required'));
}
if ($this->getContext('label_elements')) {
$this->addContext('label_elements.attributes.for', $this->getContext('id'));
}
if ($this->getContext('label') == FALSE) {
$this->addContext('label_elements.attributes.class.sr-only', 'sr-only');
}
foreach ($this->shortcutAttributes as $key) {
$value = $this->getContext($key);
if ($value === NULL) {
continue;
}
if ($key != 'class') {
$this->addContext('input_elements.attributes.' . $key, $value);
}
else {
foreach ($value as $delta => $class) {
$this->addContext('input_elements.attributes.class.auto-' . $delta, $class);
}
}
}
// Processing Grids
if ($this->getContext('grids')) {
$grids = new VTCore_Bootstrap_Grid_Column($this->getContext('grids'));
$this->addClass($grids->getClass());
}
// Support for tooltips
if ($this->getContext('tooltip')) {
foreach ($this->getContext('tooltip') as $key => $data) {
$this->addContext('input_elements.data.' . $key, $data);
}
$this->addContext('input_elements.data.toggle', 'tooltip');
}
// Support for toggle dependency
if ($this->getContext('dependencies')) {
if (class_exists('VTCore_Wordpress_Utility')) {
VTCore_Wordpress_Utility::loadAsset('bootstrap-dependency-toggle');
}
$this->addContext('input_elements.data.dependency', $this->getContext('dependencies'));
}
// Moving validators to children
if ($this->getContext('validators')) {
$this->addContext('input_elements.validators', $this->getContext('validators'));
$this->removeContext('validators');
}
}
public function getErrorContext($type) {
return $this->errorsContext[$type];
}
}