Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
/**
 * 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;
}