Files
HotLunches/include/form-functions.php
T
2026-10-19 15:22:52 -07:00

367 lines
16 KiB
PHP

<?php
//
// Functions to process custom forms
//
// BuildForm - create the form
function BuildForm($form_num,$action="process") {
global $school_num, $school_record, $webdir, $phpdir, $authCode, $FormTarget;
$returnText = "";
//
// Setup form mode based on user type and action
//
$mode = "process";
$border = "";
$userType = $_SESSION['UserInfo']['type'];
if ($userType == 'Admin' || $userType == 'SuperUser') {
$mode = "edit";
$border = "div-border";
}
if ($_GET['mode'] == 'process') {
$mode = "process";
$border = "";
}
// Get the form definition
$query = "SELECT * FROM custom_form WHERE school_num = $school_num AND record_num = $form_num";
$results = db_query($query);
if (db_num_rows($results) == 0) return(0);
$form = db_fetch_assoc($results);
$form_width = intval($form['form_width']);
$returnText .= "<form method='post' name='custom-form' id='custom-form'>\n";
$returnText .= "<table width='$form_width' border='0' cellpadding='0' cellspacing='0'>\n<tr>\n<td>\n";
if ($mode == "edit") {
$returnText .= "<a href='#' class='add-field btn btn--primary'> " . getLanguageText('TEXT-ADD-FIELD') . " </a>\n";
}
// Show form header
if (strlen($form['form_title'])) {
$form_title = nl2br($form['form_title']);
$returnText .= "<div class='custom-form-header'>$form_title</div>\n";
}
// Show form description
if (strlen($form['form_description'])) {
$form_description = nl2br($form['form_description']);
$returnText .= "<div class='custom-form-description'>$form_description</div>\n";
}
// Get form fields
$query = "SELECT * FROM custom_form_field WHERE school_num = $school_num AND form_num = $form_num ORDER BY sequence";
$fields = db_query($query);
if (db_num_rows($fields)) {
if ($mode == "edit") $returnText .= "<ul id='dynamic-form-list' class='dynamic-form-list'>\n";
$count = 0;
while ($field = db_fetch_assoc($fields)) {
extract($field);
$field_num = $record_num;
// Format field tooltip
$title = "";
if ($field_type != 'Form-Description' && strlen($field_tooltip) || $field_required == 'Y') {
$field_title = "$field_prompt:<br>";
$field_tooltip = str_replace('"',"&quot;",$field_tooltip);
if ($field_required == 'Y') {
if (strlen($field_tooltip)) $field_tooltip .= "<br>\n - ";
$field_tooltip .= "<span class='required-tip'>" . getLanguageText('TEXT-REQUIRED') . "</span>";
}
$title = "title=\"$field_title$field_tooltip\"";
}
// Clear the required_flag
$required_flag = "";
if ($mode == "edit") $returnText .= "<li id='row_$record_num'>\n";
$field_name = preg_replace("/[^a-z_-]/",'',strtolower(str_replace(' ','_',$field_prompt)));
$field_prompt = "<span id='field_prompt_$record_num'>$field_prompt</span>";
switch ($field_type) {
case 'Text':
default:
$classes = "form-field text-field";
if ($field_required == 'Y') {
$classes .= " text-required";
$required_flag = "<span class='required-field'>*</span>";
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
if ($mode == 'edit') {
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<img src='images/icons/edit16.png' class='edit-text-field' rnum='$record_num' align='right'>";
}
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='$field_size' class='$classes'>$required_flag\n";
$returnText .= "</div>\n";
break;
case 'Date':
$classes = "form-field date-field";
if ($field_required == 'Y') {
$classes .= " text-required";
$required_flag = "<span class='required-field'>*</span>";
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
$returnText .= "</div>\n";
break;
case 'Date-Picker':
$classes = "form-field date-monthyear-field";
if ($field_required == 'Y') {
$classes .= " text-required";
$required_flag = "<span class='required-field'>*</span>";
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
$returnText .= "</div>\n";
break;
case 'Datetime':
$classes = "form-field datetime-field";
if ($field_required == 'Y') {
$classes .= " text-required";
$required_flag = "<span class='required-field'>*</span>";
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
$returnText .= "</div>\n";
break;
case 'Textarea':
$classes = "form-field textarea-field";
$returnText .= "<div id='div$count' class='dynamic-form-div $border textrea-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
$returnText .= "<textarea name='$field_name' id='$field_name' rows='3' cols='$field_size' class='$classes'></textarea>\n";
$returnText .= "</div>\n";
break;
case 'Radio':
case 'RadioYN':
$classes = "form-field radio-field";
// Setup options for radio buttons
if ($field_type == 'RadioYN') $options = array('Yes','No');
else {
$options = array();
$query = "SELECT option_text FROM custom_form_field_option " .
"WHERE school_num = $school_num AND form_num = $form_num AND field_num = $field_num ORDER BY sequence";
$results = db_query($query);
while ($row = db_fetch_assoc($results)) {
$options[] = $row['option_text'];
}
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border radio-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label>$field_prompt:</label><br>\n";
for ($i = 0; $i < count($options); $i++) {
$field_option = $options[$i];
// Format the prompt attribute
$attr = str_replace('"',"&quot;",$field_prompt);
$field_id = $field_name . "_" . str_replace(' ','_',$field_option);
$checked = "";
if ($field_default == $field_option) $checked = "checked='checked'";
$returnText .= "&nbsp;&nbsp;<input type='radio' name='$field_name' id='$field_id' value='$field_option' class='$classes' $checked>";
$returnText .= "&nbsp;<label for='$field_id'>$field_option</label>&nbsp;";
}
$returnText .= "</div>\n";
break;
case 'Checkbox':
$classes = "form-field checkbox-field";
$returnText .= "<div id='div$count' class='dynamic-form-div $border checkbox-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<input type='checkbox' name='$field_name' id='$field_name' class='$classes'>";
$returnText .= "&nbsp;<label for='$field_name'>$field_prompt</label>";
$returnText .= "</div>\n";
break;
case 'Select':
$classes = "form-field select-field";
// Get options for select box
$options = array();
$query = "SELECT option_text FROM custom_form_field_option " .
"WHERE school_num = $school_num AND form_num = $form_num AND field_num = $field_num ORDER BY sequence";
$results = db_query($query);
while ($row = db_fetch_assoc($results)) {
$options[] = $row['option_text'];
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border select-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
$returnText .= "<select name='$field_name' id='$field_name' class='$classes'>\n";
if ($field_required != 'Y') {
$returnText .= " <option value=''></option>\n";
}
for ($i = 0; $i < count($options); $i++) {
$option = $options[$i];
$returnText .= " <option value='$option'>$option</option>\n";
}
$returnText .= "</select>\n";
$returnText .= "</div>\n";
break;
case 'Select-Range':
$classes = "form-field select-field";
// Get options for select box
$options = array();
if ($number1 < $number2) {
for ($i = $number1; $i <= $number2; $i++) $options[] = $i;
}
else {
for ($i = $number1; $i >= $number2; $i--) $options[] = $i;
}
$returnText .= "<div id='div$count' class='dynamic-form-div $border select-field-div' $title>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
$returnText .= "<select name='$field_name' id='$field_name' class='$classes'>\n";
if ($field_required != 'Y') {
$returnText .= " <option value=''></option>\n";
}
for ($i = 0; $i < count($options); $i++) {
$option = $options[$i];
$returnText .= " <option value='$option'>$option</option>\n";
}
$returnText .= "</select>\n";
$returnText .= "</div>\n";
break;
case 'Form-Spacer':
$returnText .= "<div id='div$count' class='dynamic-form-div $border spacer-div'>";
if ($mode == "edit") {
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= getLanguageText('TEXT-FORM-SPACER');
}
$returnText .= "</div>\n";
break;
case 'Form-Title':
$returnText .= "<div id='div$count' class='dynamic-form-div $border title-div'>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<h1>$field_prompt</h1>\n";
$returnText .= "</div>\n";
break;
case 'Form-Description':
$returnText .= "<div id='div$count' class='dynamic-form-div $border description-div'>";
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<p>$field_tooltip</p>\n";
$returnText .= "</div>\n";
break;
case 'Form-Start-Fieldset':
if ($mode == "edit") {
$returnText .= "<div id='div$count' class='dynamic-form-div $border fieldset-div'>";
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
$returnText .= "<img src='images/icons/edit16.png' class='edit-fieldset' rnum='$record_num' align='right'>";
$returnText .= getLanguageText('TEXT-START-FORM-FIELDSET') . ": <b><span id='fieldset_title_$record_num'>$field_prompt</span></b>";
$returnText .= "</div>\n";
}
if ($mode == "process") {
$returnText .= "<fieldset class='dynamic-form-fieldset'>";
$returnText .= "<legend>$field_prompt:</legend>\n";
}
break;
case 'Form-End-Fieldset':
if ($mode == "edit") {
$parent_title = db_getVal("SELECT field_prompt FROM custom_form_field WHERE school_num = $school_num AND record_num = $child_of_num");
$returnText .= "<div id='div$count' class='dynamic-form-div $border parent-$child_of_num fieldset-div' rnum='$record_num'>";
$returnText .= getLanguageText('TEXT-END-FORM-FIELDSET') . ": <b>$parent_title</b>";
$returnText .= "</div>\n";
}
if ($mode == "process") {
$returnText .= "</fieldset>";
}
break;
}
if ($mode == "edit") $returnText .= "</li>\n";
$count++;
}
$returnText .= "</ul>\n";
}
// Display form submit button
$returnText .= "<center>\n";
$returnText .= "<br>\n";
$returnText .= "<input type='submit' class='formButton' id='submit-form-btn' value='" . getLanguageText('TEXT-SAVE') . "'>\n";
$returnText .= "</center>\n";
// Show form footer
$form_footer = "";
if (strlen($form['form_footer'])) {
$form_footer = nl2br($form['form_footer']);
$returnText .= "<div class='custom-form-footer'>$form_footer</div>\n";
}
if ($mode == "edit") {
$returnText .= "<a href='#' class='add-field btn btn--primary'> " . getLanguageText('TEXT-ADD-FIELD') . " </a>\n";
}
$returnText .= "</td>\n</tr>\n</table>\n";
$returnText .= "</form>\n";
include "$webdir/include/jquery.dynamic-forms.php";
return($returnText);
}
?>