public static function controlGroup($type, $name, $value = '', $htmlOptions = array(), $data = array())
{
$color = TbArray::popValue('color', $htmlOptions);
$groupOptions = TbArray::popValue('groupOptions', $htmlOptions, array());
$controlOptions = TbArray::popValue('controlOptions', $htmlOptions, array());
$label = TbArray::popValue('label', $htmlOptions);
$labelOptions = TbArray::popValue('labelOptions', $htmlOptions, array());
// todo: remove everything that has to do with form layouts.
$formLayout = TbArray::popValue('formLayout', $htmlOptions, self::FORM_LAYOUT_VERTICAL);
$labelWidthClass = TbArray::popValue('labelWidthClass', $htmlOptions, self::$defaultFormLabelWidthClass);
// Retrieve the old-style "span" option
$span = TbArray::popValue('span', $htmlOptions);
if (!empty($span)) {
$controlWidthClass = 'col-md-' . $span;
} else {
$controlWidthClass = TbArray::popValue('controlWidthClass', $htmlOptions, self::$defaultFormControlWidthClass);
}
$useFormGroup = true;
$useControls = true;
$output = '';
// Special label case case for individual checkboxes and radios
if ($type == self::INPUT_TYPE_CHECKBOX || $type == self::INPUT_TYPE_RADIOBUTTON) {
$htmlOptions['label'] = $label;
$htmlOptions['labelOptions'] = $labelOptions;
$htmlOptions['useContainer'] = true;
$label = false;
$useFormGroup = false;
}
// Special conditions depending on the form type
if ($formLayout == self::FORM_LAYOUT_HORIZONTAL) {
switch ($type) {
case self::INPUT_TYPE_CHECKBOX:
case self::INPUT_TYPE_RADIOBUTTON:
self::addCssClass(self::switchColToOffset($labelWidthClass), $controlOptions);
self::addCssClass(self::switchOffsetToCol($controlWidthClass), $controlOptions);
$useFormGroup = true;
break;
default:
self::addCssClass(self::switchOffsetToCol($labelWidthClass), $labelOptions);
self::addCssClass(self::switchOffsetToCol($controlWidthClass), $controlOptions);
}
} elseif ($formLayout == self::FORM_LAYOUT_INLINE || $formLayout == self::FORM_LAYOUT_SEARCH) {
switch ($type) {
case self::INPUT_TYPE_TEXT:
case self::INPUT_TYPE_PASSWORD:
case self::INPUT_TYPE_URL:
case self::INPUT_TYPE_EMAIL:
case self::INPUT_TYPE_NUMBER:
case self::INPUT_TYPE_RANGE:
case self::INPUT_TYPE_DATE:
case self::INPUT_TYPE_FILE:
case self::INPUT_TYPE_SEARCH:
self::addCssClass('sr-only', $labelOptions);
if ($label !== null && TbArray::getValue('placeholder', $htmlOptions) !== null) {
$htmlOptions['placeholder'] = $label;
}
break;
case self::INPUT_TYPE_CHECKBOX:
case self::INPUT_TYPE_RADIOBUTTON:
$useControls = false;
break;
}
}
// remove until here.
$help = TbArray::popValue('help', $htmlOptions, '');
$helpOptions = TbArray::popValue('helpOptions', $htmlOptions, array());
if (!empty($help)) {
$help = self::inputHelp($help, $helpOptions);
}
$input = isset($htmlOptions['input']) ? $htmlOptions['input'] : self::createInput($type, $name, $value, $htmlOptions, $data);
if (!empty($color)) {
self::addCssClass($color, $groupOptions);
}
self::addCssClass('control-label', $labelOptions);
if ($label !== false) {
$output .= parent::label($label, $name, $labelOptions);
}
if ($useControls) {
$output .= self::controls($input . $help, $controlOptions);
} else {
$output .= $input;
}
if ($useFormGroup) {
self::addCssClass('form-group', $groupOptions);
return self::tag('div', $groupOptions, $output);
} else {
return $output;
}
}