Files
HotLunches/table-edit.php
T
2026-10-19 15:22:52 -07:00

784 lines
26 KiB
PHP

<?php
require_once("include/globals.php");
include "table-edit.functions.php";
$includeGlobalJquery = 'N';
$IncludeDIR = "form.includes";
$DialogName = "edit-dialog";
$FormName = "edit-form";
// startLog("table-edit.php");
if (!isset($FormActionName)) logExit("FormActionName not defined");
writeLog("School Num: $school_num");
// Handle parameters
if (array_key_exists('action', $_GET)) $action = db_escape_string($_GET['action']);
$CurrentFormAction = "";
switch ($action) {
case 'formfields':
case 'table.form-fields':
case 'formpermissions':
case 'table.form-permissions':
$formaction = intval($_GET['formaction']);
$CurrentFormAction = db_getVal("SELECT action_name FROM _form_actions WHERE record_num = $formaction");
writeLog("CurrentFormAction: $CurrentFormAction");
break;
}
// Load database fields if available
if (isset($FormActionName)) {
$FormActionName = db_escape_string($FormActionName);
writeLog("FormActionName: $FormActionName");
}
$DialogFields = array();
$ActionRecord = LoadAction($FormActionName);
writeLog("ActionRecord['action_searchable_flag'] :: ".$ActionRecord['action_searchable_flag']);
$return_data = LoadActionFields($FormActionName);
$TableName = $ActionRecord['action_table_name'];
$LoadTableName = $ActionRecord['action_table_load_name'];
$DialogTitle = $ActionRecord['action_dialog_title'];
$SequenceFlag = $ActionRecord['action_sortable_flag'];
$SearchFlag = $ActionRecord['action_searchable_flag'];
$SearchFields = $ActionRecord['action_searchable_fields'];
$SortField = $ActionRecord['action_sort_fields'];
$JQueryIncludeFile = $ActionRecord['action_include_js_file'];
$CustomJQuery = $ActionRecord['action_custom_jquery'];
$CustomData = $ActionRecord['action_lookup_custom_data'];
$DialogWidth = $ActionRecord['action_dialog_width'];
if (intval($DialogWidth) < 100) $DialogWidth = 750;
if (strlen($SearchFields) == 0) {
$SearchFlag = 'N';
writeLog("Search Flag set to YES without any search fields");
}
$FormDefaults = $return_data['FormDefaults'];
$DialogFields = $return_data['DialogFields'];
$generatedJQuery = "";
$SummerNoteRequired = false;
for ($i = 0; $i < count($DialogFields); $i++) {
$fname = $DialogFields[$i]['action_fields_column_name'];
$ftype = $DialogFields[$i]['action_fields_screen_field_type'];
$options_field = $DialogFields[$i]['action_fields_select_options'];
$options_classes = "";
if (array_key_exists('action_fields_option_classes',$DialogFields[$i])) $options_classes = $DialogFields[$i]['action_fields_option_classes'];
$report_sequence = intval($DialogFields[$i]['action_fields_report_sequence']);
if ($ftype == 'editbox') $SummerNoteRequired = true;
if ($report_sequence > 0 && ($ftype == 'select' || $ftype == 'select-records')) {
if ($options_field == 'YN') $options_field = "'Y','N'";
if (strlen($options_field)) {
if (strlen($options_classes) == 0) {
$options_classes = preg_replace("/[a-z0-9_]/","",strtolower($options_field));
}
$generatedJQuery .= "// $fname\n";
$generatedJQuery .= "// $options_field\n";
$generatedJQuery .= "// $options_classes\n";
$span_name = str_replace('_','-',$fname)."-data-span";
$generatedJQuery .= " \$(document).on('click touch', '.$span_name', function(e) {\n";
$generatedJQuery .= " e.preventDefault();\n";
$generatedJQuery .= "\n";
$generatedJQuery .= " var fid = \$(this).attr('id');\n";
$generatedJQuery .= " const options = [$options_field];\n";
$generatedJQuery .= " const classes = [$options_classes];\n";
$generatedJQuery .= "\n";
$generatedJQuery .= " toggleField('$TableName', '$fname', 'text', fid, options, classes);\n";
$generatedJQuery .= " });\n";
$generatedJQuery .= "\n";
}
}
}
if ($SummerNoteRequired) include "form.includes/summernote-header.php";
writeLog("SearchFlag: $SearchFlag");
?>
<center>
<?php
writeLog("Header File: $IncludeDIR/$FormActionName.header.php");
if (is_file("$IncludeDIR/$FormActionName.header.php")) {
include "$IncludeDIR/$FormActionName.header.php";
writeLog("Header File included");
}
?>
<?php if ($SearchFlag == 'Y') { ?>
<?php
$SearchFieldPrompt = getLanguageText('TEXT-SEARCH');
if (strlen($ActionRecord['action_search_field_prompt'])) {
$SearchFieldPrompt = $ActionRecord['action_search_field_prompt'];
if (strpos($SearchFieldPrompt, 'TEXT-') === 0) $SearchFieldPrompt = getLanguageText($SearchFieldPrompt);
}
?>
<table>
<tr>
<td align='left'>
<p><b><?php echo($SearchFieldPrompt); ?>:</b><br>
<input type='text' id='search-field' size='40'>
<button id='clear-search-field'> <?php displayLanguageText('BUTTON-CLEAR'); ?> </button></p>
</td>
</tr>
</table>
<?php } ?>
<p class='top-insert-button'>
<?php if ($SearchFlag == 'N') { ?>
<br>
<?php } ?>
<button class='insert-new top-insert-button'> <?php displayLanguageText('TEXT-INSERT-NEW'); ?> </button></p>
<div id='generic-table-data-div'></div>
<br>
<button class='insert-new bottom-insert-button'> <?php displayLanguageText('TEXT-INSERT-NEW'); ?> </button>
</center>
<script>
$(document).ready(function() {
<?php include "include/ajax.Setup.php"; ?>
var recordNotFound = "<?php displayLanguageText('RECORD-NOT-FOUND-MSG'); ?>";
var formFields = [];
$("#custom-data").val("");
$(".top-insert-button").hide();
<?php
for ($i = 0; $i < count($DialogFields); $i++) {
$entry = $DialogFields[$i];
$fname = $entry['action_fields_column_name'];
if (strlen($fname) == 0) continue;
$ftype = $entry['action_fields_screen_field_type'];
if ($ftype == 'hidden') continue;
$fprompt = $entry['action_fields_field_prompt'];
if (strpos($fprompt, 'TEXT-') === 0 || strpos($fprompt, 'CODE-') === 0) $fprompt = getLanguageText($fprompt);
echo(" formFields['$fname'] = '$fprompt';\n");
}
?>
loadRecords();
$("#<?php echo($DialogName) ?>").dialog({
autoOpen: false,
minWidth: <?php echo($DialogWidth) ?>,
minHeight: 500,
maxHeight: 600,
modal: true,
position: { my: 'center', at: 'center' }
});
$("#info-dialog").dialog({
autoOpen: false,
minWidth: 900,
minHeight: 400,
modal: true,
position: { my: 'center', at: 'center' }
});
$("#small-info-dialog").dialog({
autoOpen: false,
minWidth: 500,
minHeight: 300,
modal: true,
position: { my: 'center', at: 'center' }
});
$("#close-info-dialog").click(function(e) {
e.preventDefault();
$("#info-dialog").dialog('close');
});
$("#close-small-info-dialog").click(function(e) {
e.preventDefault();
$("#small-info-dialog").dialog('close');
});
$(".insert-new").on('click touch', function(e) {
e.preventDefault();
addRecord();
});
function addRecord() {
$("#<?php echo($FormName) ?> .form-field").each(function() {
var fid = $(this).attr('id');
$("#<?php echo($FormName) ?> #"+fid).val('');
$("#<?php echo($FormName) ?> #"+fid).removeClass('missing-data');
$("#<?php echo($FormName) ?> #"+fid+"-prompt").removeClass('missing-data-prompt');
$("#<?php echo($FormName) ?> #"+fid).prop('readOnly', false);
var default_id = fid+'_default';
var default_val = $('#'+default_id).val();
if (default_val.length > 0) $("#<?php echo($FormName) ?> #"+fid).val(default_val);
});
<?php
$today = date("Y-m-d", time());
$now = date("Y-m-d H:i:s", time());
if (isset($FormDefaults) && is_array($FormDefaults)) {
for ($i = 0; $i < count($FormDefaults); $i++) {
$entry = $FormDefaults[$i];
$fname = $entry[0];
$default = $entry[1];
echo(" \$(\"#$FormName #$fname\").val('$default');\n");
}
echo("\n");
}
$today = date("Y-m-d",time());
$now = date("Y-m-d H:i:s",time());
for ($i = 0; $i < count($DialogFields); $i++) {
$entry = $DialogFields[$i];
$fname = $entry['action_fields_column_name'];
$insert = $entry['action_fields_insert_active_flag'];
writeLog("addRecord: $fname $insert");
if ($insert == 'N') {
echo(" \$(\"#$FormName #$fname\").prop('readOnly', true);\n");
echo(" \$(\"#$FormName #$fname\").addClass('inactive-field');\n");
switch ($entry['action_fields_screen_field_type']) {
case 'date':
echo(" \$(\"#$FormName #$fname\").removeClass('date-field');\n");
echo(" \$(\"#$FormName #$fname\").val('$today');\n");
break;
case 'datetime':
echo(" \$(\"#$FormName #$fname\").removeClass('datetime-field');\n");
echo(" \$(\"#$FormName #$fname\").val('$now');\n");
break;
}
}
else {
switch ($entry['action_fields_screen_field_type']) {
case 'date':
echo(" \$(\"#$FormName #$fname\").addClass('date-field');\n");
echo(" \$(\"#$FormName #$fname\").val('$today');\n");
break;
case 'datetime':
echo(" \$(\"#$FormName #$fname\").addClass('datetime-field');\n");
echo(" \$(\"#$FormName #$fname\").val('$now');\n");
break;
}
}
}
?>
$("#<?php echo($FormName) ?> #record_num").val(0);
$("#<?php echo($DialogName) ?>").dialog('open');
$('#<?php echo($FormName) ?> :input:enabled:visible:first').focus();
}
function loadRecords() {
var table_name = "<?php echo($LoadTableName) ?>";
var sequence = "<?php echo($SequenceFlag) ?>";
var custom_form_where = "<?php echo($CustomData) ?>";
var custom_where = $("#custom-where").val();
var custom_data = "";
var saved_custom_data = $("#custom-data").val();
custom_data += saved_custom_data;
custom_data += "&actual_table_name=<?php echo($TableName) ?>&action-name=<?php echo($FormActionName) ?>" +
"&current_form_action=<?php echo($CurrentFormAction) ?>";
custom_data += "&custom-where="+custom_form_where+"&cwhere="+custom_where;
loadDynamicData(table_name,"generic-table-list",sequence,"data-table","generic-table-data-div",custom_data,"");
}
$(document).on('click touch', '.edit-current-record', function(e) {
e.preventDefault();
var record_num = $(this).attr('rnum');
editRecord(record_num);
});
function editRecord(record_num) {
$.ajax({
url: "ajax.DataRecord.Fetch.php",
data: {
table_name: "<?php echo($TableName) ?>",
record_num: record_num
},
dataType: "json",
error:
function(jqXHR, exception) {
alert("Exception: "+jqXHR.status+' '+jqXHR.statusText);
}
}).done(
function(results) {
// Check for errors
if (results.ajax_return_code == 0) {
alert(recordNotFound);
return;
}
$("#<?php echo($FormName) ?> .form-field").each(function() {
var fname = $(this).attr('name');
if (fname != 'password') $("#<?php echo($FormName) ?> #"+fname).val(results[fname]);
$("#<?php echo($FormName) ?> #"+fname).prop('readOnly', false);
$("#<?php echo($FormName) ?> #"+fname).removeClass('inactive-field');
});
<?php
$today = date("Y-m-d", time());
$now = date("Y-m-d H:i:s", time());
if (isset($FormDefaults) && is_array($FormDefaults)) {
echo(" var fdata;\n");
for ($i = 0; $i < count($FormDefaults); $i++) {
$entry = $FormDefaults[$i];
$fname = $entry[0];
$default = $entry[1];
switch($fname) {
case 'date_added':
$default = $today;
break;
case 'added_time':
$default = $now;
break;
}
echo(" fdata = results['$fname'];\n");
echo(" if (fdata == null || fdata.length == 0) \$(\"#$FormName #$fname\").val('$default');\n");
}
}
for ($i = 0; $i < count($DialogFields); $i++) {
$entry = $DialogFields[$i];
$fname = $entry['action_fields_column_name'];
$update = $entry['action_fields_update_active_flag'];
if ($update == 'N') {
echo(" \$(\"#$FormName #$fname\").prop('readOnly', true);\n");
echo(" \$(\"#$FormName #$fname\").addClass('inactive-field');\n");
switch ($entry['action_fields_screen_field_type']) {
case 'date':
echo(" \$(\"#$FormName #$fname\").removeClass('date-field');\n");
break;
case 'datetime':
echo(" \$(\"#$FormName #$fname\").removeClass('datetime-field');\n");
break;
}
}
else {
switch ($entry['action_fields_screen_field_type']) {
case 'date':
echo(" \$(\"#$FormName #$fname\").addClass('date-field');\n");
break;
case 'datetime':
echo(" \$(\"#$FormName #$fname\").addClass('datetime-field');\n");
break;
}
}
}
?>
$("#<?php echo($FormName) ?> #record_num").val(record_num);
updateDialogFields();
<?php if ($SearchFlag == 'Y') { ?>
$("#search-field").val("");
<?php } ?>
$("#<?php echo($DialogName) ?>").dialog('open');
}
);
}
$(document).on('touch click', '#close-<?php echo($DialogName) ?>', function(e) {
e.preventDefault();
$("#<?php echo($DialogName) ?>").dialog('close');
});
$(document).on('touch click', '#save-<?php echo($DialogName) ?>', function(e) {
e.preventDefault();
saveRecord();
});
$(document).on('change', '.form-field', function() {
var fname = $(this).attr('name');
$("#<?php echo($FormName) ?> #"+fname).removeClass('missing-data');
$("#<?php echo($FormName) ?> #"+fname+"-prompt").removeClass('missing-data-prompt');
});
function saveRecord() {
$("#error-flag").val('N');
$("#error-msg").val('');
$("#<?php echo($FormName) ?> .form-field").each(function() {
var fname = $(this).attr('name');
var errorMsg = $("#error-msg").val();
if ($("#<?php echo($FormName) ?> #"+fname).hasClass('required')) {
var fdata = $("#<?php echo($FormName) ?> #"+fname).val();
$("#<?php echo($FormName) ?> #"+fname).removeClass('missing-data');
$("#<?php echo($FormName) ?> #"+fname+"-prompt").removeClass('missing-data-prompt');
if (fdata.length == 0) {
fprompt = formFields[fname];
$("#<?php echo($FormName) ?> #"+fname).addClass('missing-data');
$("#<?php echo($FormName) ?> #"+fname+"-prompt").addClass('missing-data-prompt');
if (errorMsg.length == 0) {
focusField = fname;
$("#<?php echo($FormName) ?> #"+fname).focus();
}
errorMsg += "<?php displayLanguageText('TEXT-REQUIRED'); ?>: "+fprompt+"\n";
$("#error-msg").val(errorMsg);
$("#error-flag").val('Y');
}
}
});
var errors = $("#error-flag").val();
if (errors == 'Y') {
var errorMsg = $("#error-msg").val();
alert(errorMsg);
}
if (errors == 'N') {
var form_data = $("#<?php echo($FormName) ?>").serialize();
var data = form_data+"&table_name=<?php echo($TableName) ?>&sequence_flag=<?php echo($SequenceFlag) ?>";
$.ajax({
url: "ajax.DataRecord.Update.php",
data: data,
dataType: "json",
error:
function(jqXHR, exception) {
alert("Exception: "+jqXHR.status+' '+jqXHR.statusText);
}
}).done(function(results) {
if (results.record_num == -1) {
alert(results.ajax_error_msg);
alert("<?php displayLanguageText('ERRORMSG-UNABLE-TO-SAVE'); ?>");
return(false);
}
$("#<?php echo($DialogName) ?>").dialog("close");
loadRecords();
});
}
}
$(document).on('click touch', '.delete-current-record', function(e) {
e.preventDefault();
var rnum = $(this).attr('rnum');
deleteRecord(rnum);
});
function deleteRecord(record_num) {
var ans = confirm("<?php displayLanguageText('TEXT-CONFIRM-DELETE'); ?>");
if (ans) {
// Delete record
$.ajax({
type: 'GET',
url: "ajax.DataRecord.Delete.php",
data: { table_name: "<?php echo($TableName) ?>", record_num: record_num }
}).done(function(data) {
loadRecords();
});
}
}
$(document).on('click', '.data-header', function(e) {
e.preventDefault();
<?php if ($SequenceFlag == 'Y') { ?>
alert("<?php displayLanguageText('TEXT-SORT-NOT-AVAILABLE'); ?>");
<?php } else { ?>
var sortable = $(this).attr('sortable');
if (sortable == 'N') return;
var fname = $(this).attr('fname');
var custom_data;
var sort_field = $("#sort-field").val();
var sort_order = $("#sort-order").val();
var curr_order = 'ASC';
if (fname == sort_field) {
if (sort_order == 'ASC') curr_order = 'DESC';
}
custom_data = "&sort-field="+fname+"&sort-order="+curr_order;
$("#sort-field").val(fname);
$("#sort-order").val(curr_order);
$("#custom-data").val(custom_data);
loadRecords();
<?php } ?>
});
<?php if ($SearchFlag == 'Y') { ?>
$("#search-field").autocomplete({
source: function(request, response) {
$.ajax({
url: "ajax.SearchDBFields.php",
dataType: "json",
data: {
term: request.term,
table_name: '<?php echo($TableName) ?>',
field_names: '<?php echo($SearchFields) ?>'
},
success: function(data) {
response(data);
}
});
},
minLength: 2,
width: 750,
selectFirst: false,
select: function( event, results ) {
var rnum = results.item.record_num;
editRecord(rnum);
}
});
$("#clear-search-field").click(function(e) {
e.preventDefault();
$("#search-field").val("");
});
<?php } ?>
function toggleField(table_name, field_name, field_type, fid, options, classes) {
var value = $('#'+fid).html();
var rnum = $('#'+fid).attr('rnum');
var num_options = options.length;
var new_value = '';
var new_index = 0;
var new_class;
var i;
for (let i = 0; i < num_options; i++) {
if (new_value == '' && new_index == 0) {
if (value == options[i]) {
new_index = i + 1;
if (new_index == num_options) new_index = 0;
new_value = options[new_index];
new_class = classes[new_index];
}
}
}
$.ajax({
url: 'ajax.UpdateDBField.php',
data: {
table_name: table_name,
field_name: field_name,
field_value: new_value,
field_type: field_type,
record_num: rnum
},
dataType: 'json'
}).done(function(results) {
$("#"+fid).html(new_value);
for (let i = 0; i < num_options; i++) {
var rclass = classes[i];
if (rclass.length) $('#'+fid).removeClass(rclass);
}
$("#"+fid).addClass(new_class);
});
}
<?php
if (isset($generatedJQuery) && strlen($generatedJQuery)) {
echo("\n");
echo(" // Generated JQuery\n");
echo($generatedJQuery);
}
if (isset($CustomJQuery) && strlen($CustomJQuery)) {
$CustomJQuery = str_replace("'/", "'/", $CustomJQuery); //MWFMWF
echo("\n");
echo(" // Custom JQuery\n");
echo($CustomJQuery);
}
if (!isset($CustomJQuery) || strpos($CustomJQuery, 'updateDialogFields') === false) {
?>
function updateDialogFields() {
return;
}
<?php
}
for ($i = 0; $i < count($DialogFields); $i++) {
$entry = $DialogFields[$i];
if (!array_key_exists('action_fields_column_name',$entry)) continue;
$fname = $entry['action_fields_column_name'];
$ftype = $entry['action_fields_screen_field_type'];
if ($entry['action_fields_select_options'] == 'YN') {
$span_name = str_replace('_','-',$fname);
echo("\n");
echo(" $(document).on('click', '.$span_name-data-span', function(e) {\n");
echo(" e.preventDefault();\n");
echo("\n");
echo(" var rnum = $(this).attr('rnum');\n");
echo(" var table_name = '$TableName';\n");
echo(" var field_name = $(this).attr('fname');\n");
echo(" var fvalue = $(this).html();\n");
echo(" var id = $(this).attr('id');\n");
echo("\n");
echo(" toggleYN(rnum, table_name, field_name, fvalue, id);\n");
// echo("\n");
// echo(" if (fvalue == 'Y') fvalue = 'N';\n");
// echo(" else fvalue = 'Y';\n");
// echo("\n");
// echo(" \$.ajax({\n");
// echo(" url: 'ajax.UpdateDBField.php',\n");
// echo(" data: {\n");
// echo(" table_name: table_name,\n");
// echo(" field_name: field_name,\n");
// echo(" field_value: fvalue,\n");
// echo(" record_num: rnum\n");
// echo(" },\n");
// echo(" dataType: 'json'\n");
// echo(" }).done(function(results) {\n");
// echo(" \$('#'+id).html(fvalue);\n");
// echo(" });\n");
echo(" });\n");
echo("\n");
}
}
?>
// Function to toggle YN fields
function toggleYN(rnum, table_name, field_name, fvalue, id) {
if (fvalue == 'Y') fvalue = 'N';
else fvalue = 'Y';
$.ajax({
url: 'ajax.UpdateDBField.php',
data: {
table_name: table_name,
field_name: field_name,
field_value: fvalue,
record_num: rnum
},
dataType: 'json'
}).done(function() {
$('#'+id).html(fvalue);
});
}
<?php
writeLog("JQuery Include: $JQueryIncludeFile");
if (isset($JQueryIncludeFile) && strlen($JQueryIncludeFile)) {
if (is_file("$IncludeDIR/$JQueryIncludeFile")) {
include "$IncludeDIR/$JQueryIncludeFile";
writeLog("File Included: $IncludeDIR/$JQueryIncludeFile");
}
}
echo("\n");
echo(" // $CurrentFormAction\n");
echo(" // FormActionName: $FormActionName.js\n");
if (is_file("$IncludeDIR/$FormActionName.js")) {
include "$IncludeDIR/$FormActionName.js";
writeLog("File Included: $IncludeDIR/$FormActionName.js");
}
if (is_file("$IncludeDIR/$FormActionName.js.php")) {
include "$IncludeDIR/$FormActionName.js.php";
writeLog("File Included: $IncludeDIR/$FormActionName.js.php");
}
?>
<?php include "load.dynamic.php" ?>
});
</script>
<?php
if ($SummerNoteRequired) include "summernote.images.php";
$customWhere = '';
if ($FormActionName == 'student-people') {
if (array_key_exists('account_num', $_GET)) {
$acctNum = intval($_GET['account_num']);
$customWhere = "AND user_num = $acctNum ";
}
}
?>
<input type='hidden' id='error-flag'>
<input type='hidden' id='error-msg'>
<input type='hidden' id='custom-data'>
<input type='hidden' id='custom-where' value='<?php echo($customWhere) ?>'>
<input type='hidden' id='sort-field' value='<?php echo($SortField) ?>'>
<input type='hidden' id='sort-order' value='ASC'>
<input type='hidden' id='table-name' value='<?php echo($TableName) ?>'>
<input type='hidden' id='list-table-name' value='<?php echo($LoadTableName) ?>'>
<input type='hidden' id='account-number' value='0'>
<?php
BuildDialogForm($DialogTitle, $DialogFields, $DialogName, $FormName);
writeLog("Footer File: $IncludeDIR/$FormActionName.footer.php");
if (is_file("$IncludeDIR/$FormActionName.footer.php")) {
include "$IncludeDIR/$FormActionName.footer.php";
writeLog("Footer File included");
}
?>
<div id='info-dialog' title="<?php displayLanguageText('TEXT-INFORMATION'); ?>">
<center>
<div style='overflow-y: scroll; height: 500px'>
<div id='info-dialog-data-div'></div>
<br>
<br>
<br>
</div>
<button id='close-info-dialog'> <?php displayLanguageText('TEXT-CLOSE'); ?> </button></p>
</center>
</div>
<div id='small-info-dialog' title="<?php displayLanguageText('TEXT-INFORMATION'); ?>">
<center>
<!-- <div style='overflow-y: scroll; height: 500px'> -->
<div id='small-info-dialog-data-div'></div>
<br>
<br>
<br>
<!-- </div> -->
<button id='close-small-info-dialog'> <?php displayLanguageText('TEXT-CLOSE'); ?> </button></p>
</center>
</div>