/** * Renders a fieldset. Fieldsets contain other elements, and do not count as a * "true" element, in that they do not have a value and cannot be validated. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_fieldset(Pieform $form, $element) { global $_PIEFORM_FIELDSETS; $openparam = false; $formname = $form->get_name(); $legendcontent = isset($element['legend']) ? Pieform::hsc($element['legend']) : ''; $iscollapsible = pieform_is_collapsible($element); $iscollapsed = pieform_is_collapsed($form, $element); $classes = array('pieform-fieldset'); if (!empty($element['class'])) { $classes[] = Pieform::hsc($element['class']); } // if fieldset is collapsible, we need to adjust the legend html and add a class to the fieldset if ($iscollapsible) { $classes[] = 'collapsible'; if (!isset($_PIEFORM_FIELDSETS['forms'][$formname])) { $_PIEFORM_FIELDSETS['forms'][$formname] = array('formname' => $formname); } if (isset($element['name'])) { $openparam = $formname . '_' . $element['name'] . '_open'; } $triggerclass = $iscollapsed ? 'collapsed' : ''; $ariaexpanded = $iscollapsed ? 'false' : 'true'; $legendcontent = '<a href="#' . $openparam . '" data-toggle="collapse" aria-expanded="' . $ariaexpanded . '" aria-controls="' . $openparam . '" class="' . $triggerclass . '">'; if (!empty($element['iconclass'])) { $legendcontent .= '<span class="icon icon-' . $element['iconclass'] . ' prl type-icon"> </span>'; } $legendcontent .= Pieform::hsc($element['legend']); $legendcontent .= '<span class="icon icon-chevron-down collapse-indicator pull-right"> </span> '; $legendcontent .= '</a>'; } $fieldset = '<fieldset class="' . implode(' ', $classes) . '">'; // Render legend and associated objects if (isset($element['legend'])) { $fieldset .= '<legend><h4>' . $legendcontent; // Help icon if (!empty($element['help'])) { $function = $form->get_property('helpcallback'); if (function_exists($function)) { $fieldset .= $function($form, $element); } else { $fieldset .= '<span class="help"><a href="" title="' . Pieform::hsc($element['help']) . '" onclick="return false;">?</a></span>'; } } $fieldset .= "</h4></legend>\n"; } // Render the body of the fieldset $stateClass = $iscollapsed ? '' : 'in'; $fieldset .= $iscollapsible ? '<div class="fieldset-body collapse ' . $stateClass . '" id="' . $openparam . '">' : ''; if (!empty($element['renderer']) && $element['renderer'] == 'multicolumnfieldsettable') { $fieldset .= _render_elements_as_multicolumn($form, $element); } else { foreach ($element['elements'] as $subname => $subelement) { if ($subelement['type'] == 'hidden') { throw new PieformException("You cannot put hidden elements in fieldsets"); } $fieldset .= "\t" . pieform_render_element($form, $subelement); } } $fieldset .= $iscollapsible ? '</div>' : ''; $fieldset .= "</fieldset>\n"; return $fieldset; }
/** * Renders a fieldset. Fieldsets contain other elements, and do not count as a * "true" element, in that they do not have a value and cannot be validated. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_fieldset(Pieform $form, $element) { /*{{{*/ global $_PIEFORM_FIELDSETS; $result = "\n<fieldset"; $classes = array('pieform-fieldset'); if (!empty($element['class'])) { $classes[] = Pieform::hsc($element['class']); } if (!empty($element['collapsible'])) { if (!isset($element['legend']) || $element['legend'] === '') { Pieform::info('Collapsible fieldsets should have a legend so they can be toggled'); } $classes[] = 'collapsible'; $formname = $form->get_name(); if (!isset($_PIEFORM_FIELDSETS['forms'][$formname])) { $_PIEFORM_FIELDSETS['forms'][$formname] = array('formname' => $formname); } if (isset($element['name'])) { $openparam = $formname . '_' . $element['name'] . '_open'; } // Work out whether any of the children have errors on them $error = false; foreach ($element['elements'] as $subelement) { if (isset($subelement['error'])) { $error = true; break; } } if (!empty($element['collapsed']) && !$error && (!isset($element['name']) || param_alphanumext('fs', null) != $element['name'] && !param_boolean($openparam, false))) { $classes[] = 'collapsed'; } } $result .= ' class="' . implode(' ', $classes) . '"'; $result .= ">\n"; if (isset($element['legend'])) { $result .= '<legend><h4>'; if (!empty($element['collapsible'])) { $result .= '<a href="">' . Pieform::hsc($element['legend']) . '</a>'; if (isset($openparam)) { $result .= '<input type="hidden" name="' . hsc($openparam) . '" class="open-fieldset-input" ' . 'value="' . intval(!in_array('collapsed', $classes)) . '">'; } } else { $result .= Pieform::hsc($element['legend']); } // Help icon if (!empty($element['help'])) { $function = $form->get_property('helpcallback'); if (function_exists($function)) { $result .= $function($form, $element); } else { $result .= '<span class="help"><a href="" title="' . Pieform::hsc($element['help']) . '" onclick="return false;">?</a></span>'; } } $result .= "</h4></legend>\n"; } if (!empty($element['renderer']) && $element['renderer'] == 'multicolumnfieldsettable') { $result .= _render_elements_as_multicolumn($form, $element); } else { foreach ($element['elements'] as $subname => $subelement) { if ($subelement['type'] == 'hidden') { throw new PieformException("You cannot put hidden elements in fieldsets"); } $result .= "\t" . pieform_render_element($form, $subelement); } } $result .= "</fieldset>\n"; return $result; }