0) {
return;
}
nuEval("{$formId}_BB");
}
function nuBeforeEdit($FID, $RID) {
$r = nuFormProperties($FID);
$GLOBALS['EXTRAJS'] = '';
$GLOBALS['EXTRAJS_BC'] = '';
$GLOBALS['STYLE'] = '';
$ct = $_POST['nuSTATE']['call_type'];
if ($ct == 'getreport' and $r == '') {
return;
}
if ($ct == 'getform' and $r == '') {
return;
}
if ($r === false)
return;
$formType = $_POST['nuSTATE']['form_type'] ?? '';
$recordID = $_POST['nuSTATE']['record_id'] ?? '';
if ($ct == 'getform') {
$logfield = $r->sfo_table . '_nulog';
$cts = nuGetJSONData('clientTableSchema');
$user = $_POST['nuHash']['USER_ID'];
$globalAccess = nuGlobalAccess(true);
if (!$globalAccess) {
$ft = nuGetFormPermission($FID, 'slf_form_type');
$formSatus = nuGetFormStatus($FID);
if (($recordID == "" && $ft == '1') || ($recordID !== "" && $ft == '0') || $formSatus != '1' /* active */) {
nuDisplayError(nuTranslate('Access Denied'));
return;
}
}
if ((nuObjKey($cts, $r->sfo_table) != NULL && $recordID != '')) {
if (in_array($logfield, $cts[$r->sfo_table]['names'])) { //-- valid log field name
$S = "SELECT $logfield FROM `$r->sfo_table` WHERE `$r->sfo_primary_key` = ? ";
$T = nuRunQuery($S, [$RID]);
$jd = '';
if (db_num_rows($T) == 1) {
$J = db_fetch_row($T);
$J = $J[0];
$_POST['nuLog'] = $J;
$jd = nuJsonDecode($J);
}
if (gettype($jd) == 'object') {
$jd->viewed = ['user' => $user, 'time' => time()];
} else {
$jd = new stdClass;
$jd->added = ['user' => 'unknown', 'time' => 0];
$jd->viewed = ['user' => $user, 'time' => time()];
}
$je = nuAddSlashes(json_encode($jd));
$S = "UPDATE `$r->sfo_table` SET $logfield = '$je' WHERE `$r->sfo_primary_key` = ? ";
$T = nuRunQuery($S, [$RID]);
} else {
$_POST['nuLog'] = json_encode([]);
}
}
}
if ($recordID != '' || $formType == 'launch') {
$p = nuProcedure('nu_before_edit');
if ($p != '') {
eval ($p);
}
if (count($_POST['nuErrors']) > 0) {
return;
}
nuEval($FID . '_BE');
}
$js = $r->sfo_javascript;
$jb = $r->sfo_browse_javascript ?? '';
$je = $r->sfo_edit_javascript ?? '';
$js .= $recordID == '' ? ' ' . $jb : ' ' . $je;
$GLOBALS['STYLE'] = $r->sfo_style ?? '';
$GLOBALS['EXTRAJS'] .= $js;
}
function nuFormCode($f) {
return nuFormProperties($f, 'sfo_code')->sfo_code;
}
function nuRunType($runType, $formId) {
if ($runType === 'P' || nuIsProcedure($formId)) {
return 'P';
} elseif ($runType === 'R' || nuIsReport($formId)) {
return 'R';
} else {
return 'F';
}
}
function nuEvents($r) {
return $r->sob_all_event ?? '';
}
function nuGetFormObject($formId, $recordId, $numObjects, $defaultTabs = null) {
$defaultTabs = $defaultTabs ?? nuBuildTabList($formId);
$response = new stdClass();
$formObject = nuGetEditForm($formId, $recordId);
if ($formObject === null) {
$response->forms[] = $formObject;
return $response->forms[0];
}
nuGetFormSetBasicProperties($formObject, $formId, $recordId);
$data = nuGetFormData($formObject, $recordId);
list($formObjects, $cloneableObjects) = nuGetFormProcessObjects($formObject, $formId, $recordId, $data, $defaultTabs, $numObjects);
nuGetFormFinalize($formId, $formObject, $defaultTabs, $formObjects, $cloneableObjects);
$response->forms[] = $formObject;
if ($formObject->browse_filtered_rows == 0) {
nuOnProcess($formId, $formObject, 'BE', 'nuOnProcessObjects');
}
return $response->forms[0];
}
function nuGetFormSetBasicProperties($formObject, $formId, $recordId) {
$formObject->form_id = $formId;
if (empty($recordId) && $formObject->form_type == 'launch') {
$recordId = '-1';
}
$formObject->record_id = $recordId;
}
function nuGetFormData($formObject, $recordId) {
if (!isset($formObject->table) || $formObject->table == '' || $recordId == '') {
return [];
} else {
$query = "SELECT * FROM `$formObject->table` WHERE `$formObject->primary_key` = ?";
$stmt = nuRunQuery($query, [$recordId]);
return db_fetch_array($stmt);
}
}
function nuGetFormProcessObjects($formObject, $formId, $recordId, $data, $defaultTabs, $numObjects) {
$formObjects = [];
$cloneableObjects = [];
if ($recordId === '' && $formObject->form_type !== 'launch') { // Browse
return [$formObjects, $cloneableObjects];
}
$sqlQuery = "
SELECT
*
FROM
zzzzsys_form
INNER JOIN zzzzsys_object ON sob_all_zzzzsys_form_id = zzzzsys_form_id
INNER JOIN zzzzsys_tab ON zzzzsys_tab_id = sob_all_zzzzsys_tab_id
WHERE
zzzzsys_form_id = ?
ORDER BY
IF(sob_all_type = 'contentbox', -1, sob_all_order),
syt_order,
(sob_all_type = 'run'),
sob_all_zzzzsys_tab_id
";
$dbFields = ($data !== []) ? db_field_names($formObject->table) : [];
$stmt = nuRunQuery($sqlQuery, [$formId]);
while ($row = db_fetch_object($stmt)) {
$object = nuDefaultObject($row, $defaultTabs);
nuGetFormModifyObject($object, $formObject, $row, $recordId, $data, $numObjects, $cloneableObjects, $dbFields);
$formObjects[] = $object;
}
return [$formObjects, $cloneableObjects];
}
function nuGetFormModifyObject($object, $formObject, $row, $recordId, $data, $numObjects, &$cloneableObjects, $dbFields) {
if ($row->sob_all_cloneable == '0') {
$cloneableObjects[] = ['subform' => $row->sob_all_type == 'subform', 'id' => $row->sob_all_id];
}
$object->table_column = in_array($row->sob_all_id, $dbFields) ? '1' : '0';
$object->value = ($recordId == '-1') ? '' : nuObjKey($data, $row->sob_all_id, '');
if ($row->sob_all_type == 'calc') {
$object->formula = $row->sob_calc_formula;
$object->format = $row->sob_calc_format;
$object->align = $row->sob_all_align;
$object->calc_order = $row->sob_all_order;
}
if ($row->sob_all_type == 'textarea' || $row->sob_all_type == 'run') {
$object->align = $row->sob_all_align;
}
if ($row->sob_all_type == 'input' || $row->sob_all_type == 'display') {
$object->align = $row->sob_all_align;
$object->format = '';
$inputType = $row->sob_input_type;
if ($inputType == 'nuNumber' || $inputType == 'nuDate') {
$object->format = $row->sob_input_format;
}
if ($inputType == 'nuAutoNumber') {
$object->counter = $object->value;
}
$object->input = $inputType;
if ($inputType == 'button' && $row->sob_all_type == 'input') {
$object->value = $row->sob_all_label;
}
if ($inputType == 'nuScroll' && $row->sob_all_type == 'input') {
$object->scroll = $row->sob_input_javascript;
}
$supportedDatalistInputTypes = ['nuDate', 'nuNumber', 'number', 'text', 'email', 'search', 'month'];
if (in_array($inputType, $supportedDatalistInputTypes) &&
$row->sob_all_type === 'input' &&
!empty($row->sob_input_datalist)) {
$datalistOptions = nuDataListOptions(nuReplaceHashVariables($row->sob_input_datalist));
$object->datalist = json_encode($datalistOptions);
}
if ($row->sob_all_type == 'display') {
$object->value = null;
$displayProcedure = $row->sob_display_procedure ?? '';
if ($displayProcedure) {
$code = nuProcedure($displayProcedure);
if ($code !== '') {
$object->value = nuEval($displayProcedure, true);
}
} else {
$displaySql = trim(nuReplaceHashVariables($row->sob_display_sql));
$displaySql = str_replace("#OBJECT_ID#", $object->object_id, $displaySql);
$displayResult = nuRunQuery($displaySql);
if (db_num_rows($displayResult) >= 1) {
$displayRow = db_fetch_row($displayResult);
$object->value = rtrim(implode("\n", $displayRow), "\n");
}
}
}
}
if ($row->sob_all_type == 'contentbox') {
$contentWidth = $object->width . "px";
$contentHeight = $object->height . "px";
$contentLabel = nuTranslate($row->sob_all_label);
$contentId = $row->sob_all_id;
$contentTitleId = 'label_' . $contentId;
$contentContentId = 'content_' . $contentId;
$contentBoxId = 'box_' . $contentId;
$contentAlign = $row->sob_all_align;
$object->html = nuReplaceHashVariables($row->sob_html_code) . "
";
}
$fileTarget = isset($row->sob_input_file_target) ? $row->sob_input_file_target : 0;
$object->file_target = $fileTarget;
if ($row->sob_all_type == 'editor' || ($row->sob_all_type == 'input' && $fileTarget == 1)) {
$object->html = nuReplaceHashVariables($row->sob_html_code);
}
if ($row->sob_all_type == 'chart') {
// $object->html = '';
$htmljs = nuAddSlashes($row->sob_html_javascript ?? '');
$verticalLabel = $row->sob_html_vertictal_label ?? '';
$horizontalLabel = $row->sob_html_horizontal_label ?? '';
$title = $row->sob_html_title ?? '';
$chart_options = [
'p' => ['type' => 'PieChart', 'stacked' => false, 'chart_type' => 'pie'],
'l' => ['type' => 'ComboChart', 'stacked' => false, 'chart_type' => 'lines'],
'b' => ['type' => 'ComboChart', 'stacked' => false, 'chart_type' => 'bars'],
'bs' => ['type' => 'ComboChart', 'stacked' => true, 'chart_type' => 'bars'],
'bh' => ['type' => 'BarChart', 'stacked' => false, 'chart_type' => 'bars'],
'bhs' => ['type' => 'BarChart', 'stacked' => true, 'chart_type' => 'bars']
];
$chart_type = $row->sob_html_chart_type ?? '';
if (array_key_exists($chart_type, $chart_options)) {
$type = $chart_options[$chart_type]['type'];
$stacked = $chart_options[$chart_type]['stacked'];
$chart_type = $chart_options[$chart_type]['chart_type'];
$htmlj = "\nnuChart('$row->sob_all_id', '$type', '$htmljs', '$title', '$horizontalLabel', '$verticalLabel', '$chart_type', $stacked);";
nuAddJavaScript($htmlj);
}
}
if ($row->sob_all_type == 'html') {
$object->html = nuReplaceHashVariables($row->sob_html_code);
}
if ($row->sob_all_type == 'image') {
$object->src = nuGetSrc($row->sob_image_zzzzsys_file_id);
}
if ($row->sob_all_type == 'select') {
$object->multiple = $row->sob_select_multiple;
$object->select2 = $row->sob_select_2 ?? null;
$object->options = null;
$selectProcedure = $row->sob_select_procedure ?? '';
if ($selectProcedure) {
$code = nuProcedure($selectProcedure);
if ($code !== '') {
nuEval($selectProcedure, true);
$object->options = $_POST['nuRunPHPHiddenResult'];
}
} else {
$object->options = nuSelectOptions($row->sob_select_sql, $object->object_id);
}
}
if ($row->sob_all_type == 'run') {
$formId = $row->sob_run_zzzzsys_form_id;
$object->form_id = $formId;
$object->record_id = nuReplaceHashVariables($row->sob_run_id);
$object->parameters = $row->sob_all_id;
$runType = nuRunType($row->sob_run_type ?? '', $formId);
if ($runType === 'F') {
$object->run_type = 'F';
} elseif ($runType === 'P') {
$procedureQuery = nuRunQuery('SELECT sph_zzzzsys_form_id, sph_code FROM zzzzsys_php WHERE zzzzsys_php_id = ?', [$formId]);
$procedureObject = db_fetch_object($procedureQuery);
$object->form_id = $procedureObject->sph_zzzzsys_form_id;
$object->record_id = $procedureObject->sph_code;
$object->run_type = 'P';
$runTabQuery = nuRunQuery("SELECT sph_run FROM zzzzsys_php WHERE zzzzsys_php_id = ?", [$row->sob_run_zzzzsys_form_id]);
$object->run_hidden = db_fetch_object($runTabQuery)->sph_run == 'hide';
} elseif ($runType === 'R') {
$reportQuery = nuRunQuery('SELECT sre_zzzzsys_form_id, sre_code FROM zzzzsys_report WHERE zzzzsys_report_id = ?', [$formId]);
$reportObject = db_fetch_object($reportQuery);
$object->form_id = $reportObject->sre_zzzzsys_form_id;
$object->record_id = $reportObject->sre_code;
$object->run_type = 'R';
} else {
$object->run_type = 'F';
}
$object->filter = nuReplaceHashVariables($row->sob_run_filter);
$object->run_method = $row->sob_run_method;
$object->run_target = $row->sob_run_target ?? '0';
}
if ($row->sob_all_type == 'lookup') {
$object->description_width = $row->sob_lookup_description_width;
$object->form_id = $row->sob_lookup_zzzzsys_form_id;
$object->values = nuGetLookupValues($row, $object);
}
if ($row->sob_all_type == 'subform') {
$row->subform_fk = $recordId;
$object->subform_fk = $recordId;
$object->subform_type = $row->sob_subform_type;
$object->delete = $row->sob_subform_delete;
$formObject->foreign_key_name = $row->sob_subform_foreign_key;
$object->foreign_key_name = $row->sob_subform_foreign_key;
$object->primary_key_name = nuFormProperties($row->sob_subform_zzzzsys_form_id, 'sfo_primary_key')->sfo_primary_key;
$formObject->primary_key_name = $object->primary_key_name;
$object->add = $row->sob_subform_add;
$object->dimensions = nuFormDimensions($row->sob_subform_zzzzsys_form_id);
$object->forms = nuGetSubformRecords($row, $cloneableObjects);
$object->sf_form_id = $row->sob_subform_zzzzsys_form_id;
$object->browse_columns = [];
}
if ($row->sob_all_type == 'word') {
$object->word = $row->sob_all_label;
$object->align = $row->sob_all_align;
}
if (nuEvents($row->zzzzsys_object_id) == '0') {
$object->js = [];
} else {
$object->js = nuObjectEvents($row->zzzzsys_object_id);
}
$object->tab_order = $row->sob_all_order;
$object->style_type = $row->sob_all_style_type ?? '';
$object->style = $row->sob_all_style ?? '';
$object->attributes = isset($row->sob_input_attribute) && $row->sob_input_attribute != '' ? $row->sob_input_attribute : '';
$object->input_icon = isset($row->sob_input_icon) && $row->sob_input_icon != '' ? $row->sob_input_icon : '';
if ($numObjects > 0) {
unset($object->type, $object->id, $object->label, $object->top, $object->left, $object->width, $object->height, $object->align);
}
}
function nuGetFormFinalize($formId, $formObject, $defaultTabs, $formObjects, $cloneableObjects) {
$formObject->tabs = nuRefineTabList($defaultTabs);
$formObject->objects = $formObjects;
$formObject->noclone = $cloneableObjects;
$formObject->browse_columns = nuBrowseColumns($formObject);
$browseRows = nuBrowseRows($formObject);
$formObject->browse_rows = nuObjKey($browseRows, 0, 0);
$formObject->browse_filtered_rows = nuObjKey($browseRows, 1, 0);
$formObject->browse_sql = nuObjKey($browseRows, 2, 0);
if ($formObject->browse_filtered_rows > 0) {
nuOnProcess($formId, $formObject, 'BB', 'nuOnProcessBrowseRows');
}
$formObject->browse_table_id = nuHash()['TABLE_ID'];
$rowsPerPage = $formObject->rows ?? 1;
$formObject->pages = ceil($formObject->browse_filtered_rows / $rowsPerPage);
$formObject->number_formats = nuBuildCurrencyFormats();
}
function nuExtractFunctionBody($functionName, $data) {
$c = preg_match("/function\s+" . $functionName . "\s*\((?[^\)]*)\)\s*(?\{(?:[^{}]+|(?&body))*\})/", $data, $matches);
if ($c == 0) {
$c = preg_match("/\\$" . $functionName . "\s+=\s+function\s*\((?[^\)]*)\)\s*(?\{(?:[^{}]+|(?&body))*\})/", $data, $matches);
}
return $c > 0 ? $matches['body'] : null;
}
function nuOnProcess($F, &$f, $eventCode, $functionName) {
$p = nuProcedure($F . '_' . $eventCode);
if ($p != '') {
if (strpos($p, $functionName) !== false) {
$body = nuExtractFunctionBody($functionName, $p);
if ($body != null) {
eval ($body);
}
}
}
}
function nuGetSrc($i) {
$s = "SELECT sfi_json FROM zzzzsys_file WHERE zzzzsys_file_id = ? ";
$t = nuRunQuery($s, [$i]);
if (db_num_rows($t) == 1) {
$r = db_fetch_object($t);
$json = nuJsonDecode($r->sfi_json);
$j = $json->file;
} else {
$j = null;
}
return $j;
}
function nuObjectEvents($i) {
$a = [];
$s = "SELECT sev_event AS event, sev_javascript AS js FROM zzzzsys_event WHERE sev_zzzzsys_object_id = ?";
$t = nuRunQuery($s, [$i]);
while ($r = db_fetch_object($t)) {
$a[] = $r;
}
return $a;
}
function nuDefaultObject($r, $t) {
$o = new stdClass();
$v = $r->sob_all_validate;
$o->type = $r->sob_all_type;
$o->object_id = $r->zzzzsys_object_id;
$o->id = $r->sob_all_id;
$o->label = $r->sob_all_label;
$top = null;
$left = null;
$width = null;
$height = null;
$mobile = null;
$visible = null;
$labelOnTop = null;
/*
if (nuIsMobile() && isset($r->sob_all_json)) {
$json = $r->sob_all_json;
if ($json != '') {
$obj = nuJsonDecode($json, true);
$type = nuObjKey($obj,'type', null);
if ($type != null) {
$mobile = nuObjKey($type,'mobile', null);
if ($mobile == true) {
$visible = nuObjKey($mobile,'visible', null);
$name = nuObjKey($mobile,'name', null);
$labelOnTop = nuObjKey($mobile,'labelontop', null);
$labelOnTop = $labelOnTop == null || $labelOnTop == true;
$size = nuObjKey($mobile,'size');
if ($size != null) {
$width = nuObjKey($size, 'width', null);
$height = nuObjKey($size, 'height', null);
}
$location = nuObjKey($mobile,'location');
if ($location != null) {
$top = nuObjKey($location, 'top', null);
$left = nuObjKey($location, 'left', null);
}
}
}
}
}
*/
$o->mobile = $mobile;
$o->labelOnTop = $labelOnTop;
$o->visible = $visible;
$o->top = $top == null ? $r->sob_all_top : $top;
$o->left = $left == null ? $r->sob_all_left : $left;
$o->width = $width == null ? $r->sob_all_width : $width;
$o->height = $height == null ? $r->sob_all_height : $height;
$o->valid = $r->sob_all_validate;
$o->format = '';
$accessCondition = $r->sob_all_access_condition ?? null;
$o->read = nuGetObjectAccess($r->sob_all_access, $accessCondition);
$countt = count($t);
for ($i = 0; $i < $countt; $i++) {
if ($r->sob_all_zzzzsys_tab_id == $t[$i]->zzzzsys_tab_id) {
$o->tab = $t[$i]->number;
}
}
return $o;
}
function nuGetObjectAccess($access, $condition) {
if ($access == 9 && !empty(trim($condition))) {
$sql = nuReplaceHashVariables($condition);
$stmt = nuRunQueryString($sql, $condition);
if (db_num_rows($stmt) == 1) {
$value = db_fetch_row($stmt)[0];
return $value;
} else {
return 0; // read/visible
}
} else {
return $access;
}
}
function nuFormEvents($formId) {
$o = [];
$query = "SELECT RIGHT(zzzzsys_php_id, 2) as event FROM zzzzsys_php WHERE zzzzsys_php_id LIKE ?";
$stmt = nuRunQuery($query, [$formId . '_' . '%']);
while ($row = db_fetch_object($stmt)) {
$o[$row->event] = true;
}
return $o;
}
function nuGetEditForm($F, $R) {
$f = new stdClass();
if ($F == '')
return $f;
$r = nuFormProperties($F);
if (!$r) {
return; // form does not exist
}
$SQL = new nuSqlString(nuReplaceHashVariables($r->sfo_browse_sql));
$f->id = $r->zzzzsys_form_id;
$f->form_code = $r->sfo_code;
$f->form_description = $r->sfo_description;
$f->form_group = $r->sfo_group ?? '';
$f->form_type = $r->sfo_type;
$f->browse_title_multiline = $r->sfo_browse_title_multiline ?? false;
$f->browse_autoresize_columns = $r->sfo_browse_autoresize_columns ?? null;
$f->mobile_view = $r->sfo_mobile_view ?? null;
$f->table = nuReplaceHashVariables($r->sfo_table);
$f->primary_key = $r->sfo_primary_key;
$f->redirect_form_id = $r->sfo_browse_redirect_form_id == '' ? $r->zzzzsys_form_id : $r->sfo_browse_redirect_form_id;
$f->redirect_other_form_id = $r->sfo_browse_redirect_form_id == '' ? '' : $r->sfo_browse_redirect_form_id;
$f->browse_target = $r->sfo_browse_target ?? '';
$f->order = $SQL->orderBy;
$f->where = $SQL->where;
$f->from = $SQL->from;
$f->javascript = $r->sfo_javascript;
$f->javascript_edit = $r->sfo_edit_javascript ?? '';
$f->javascript_browse = $r->sfo_browse_javascript ?? '';
$f->events = nuFormEvents($F);
if (intval($r->sfo_browse_row_height) == 0) {
$f->row_height = 18;
} else {
$f->row_height = intval($r->sfo_browse_row_height);
}
$f->rows = nuRowsPerPage($r->sfo_browse_rows_per_page);
$f->title = nuBreadcrumbDescription($r, $R);
return $f;
}
function nuRowsPerPage($rows) {
if (nuHasProperty('ROWS_PER_PAGE', $value, false)) {
return intval($value);
} else {
return ($rows == 0 || $rows == null) ? 20 : $rows;
}
}
function nuBreadcrumbDescriptionPart($bt) {
$bt = nuReplaceHashVariables($bt);
if (strtolower(substr(nuTrim($bt), 0, 6)) == 'select') {
$t = nuRunQuery($bt);
return db_num_rows($t) > 0 ? db_fetch_row($t)[0] : '';
}
return $bt;
}
function nuBreadcrumbDescription($r, $R) {
if ($R == '') {
return $r->sfo_description;
} //-- Browse Form, new record
if (!isset($r->sfo_breadcrumb_title) || nuTrim($r->sfo_breadcrumb_title) == '') {
return $r->sfo_description;
} //-- no breadcrumb
$bt = $r->sfo_breadcrumb_title;
$parts = nuStringContains('|', $bt);
if ($parts) {
$a = explode("|", $bt);
$b = $R == '-1' ? nuTranslate(nuBreadcrumbDescriptionPart($a[1])) : nuBreadcrumbDescriptionPart($a[0]);
} else {
$b = nuBreadcrumbDescriptionPart($bt);
}
return stripslashes(nuReplaceHashVariables($b));
}
function nuGetOtherLookupValues($lookupObject) {
$objectId = $lookupObject->object_id;
$lookupRecordId = $_POST['nuHash']['LOOKUP_RECORD_ID'];
$query = "SELECT sob_lookup_zzzzsys_form_id as form_id FROM zzzzsys_object WHERE zzzzsys_object_id = ? ";
$stmt = nuRunQuery($query, [$objectId]);
$result = db_fetch_object($stmt);
$formId = $result->form_id;
$formProperties = nuFormProperties($formId, 'sfo_table, sfo_primary_key');
$selectQuery = "SELECT * FROM $formProperties->sfo_table WHERE $formProperties->sfo_primary_key = ? ";
$selectStmt = nuRunQuery($selectQuery, [$lookupRecordId]);
$_POST['lookup_row'] = db_fetch_object($selectStmt);
if (db_num_rows($selectStmt) == 1) {
$_POST['lookup_row']->ID = $lookupRecordId;
}
if (db_num_rows($selectStmt) == 0) {
$_POST['lookup_row'] = new stdClass;
$_POST['lookup_row']->ID = $lookupRecordId;
}
$_POST['lookup_values'] = [];
$GLOBALS['EXTRAJS'] = '';
nuEval($objectId . '_AB');
return $_POST['lookup_values'];
}
function nuGetAllLookupValues() {
$objectId = $_POST['nuSTATE']['object_id'];
$primaryKey = $_POST['nuSTATE']['primary_key'];
$query = "SELECT * FROM `zzzzsys_object` WHERE `zzzzsys_object_id` = ?";
$stmt = nuRunQuery($query, [$objectId]);
$row = db_fetch_object($stmt);
$object = nuDefaultObject($row, []);
$object->description_width = $row->sob_lookup_description_width;
$object->form_id = $row->sob_lookup_zzzzsys_form_id;
$object->value = $primaryKey;
$lookupValues = nuGetLookupValues($row, $object);
$_POST['nuHash']['LOOKUP_RECORD_ID'] = $lookupValues[0][1];
$otherLookupValues = nuGetOtherLookupValues($object);
$result = new stdClass;
$result->lookup_values = array_merge($lookupValues, $otherLookupValues);
$result->lookup_javascript = nuObjKey($GLOBALS, 'EXTRAJS', '') . ";$row->sob_lookup_javascript";
return $result;
}
function nuGetLookupValues($objectRow, $lookupObject) {
$previousTableId = $_POST['nuHash']['TABLE_ID'];
$_POST['nuHash']['TABLE_ID'] = nuTT();
nuBeforeBrowse($lookupObject->form_id);
$query = "SELECT sfo_primary_key, sfo_browse_sql FROM zzzzsys_form WHERE zzzzsys_form_id = ?";
$stmt = nuRunQuery($query, [$lookupObject->form_id]);
$result = db_fetch_object($stmt);
$sqlString = new nuSqlString(nuReplaceHashVariables($result->sfo_browse_sql));
$selectQuery = "
SELECT
$result->sfo_primary_key,
$objectRow->sob_lookup_code,
$objectRow->sob_lookup_description
$sqlString->from
WHERE
`$result->sfo_primary_key` = ?
";
$selectQuery = nuReplaceHashVariables($selectQuery);
$selectStmt = nuRunQuery($selectQuery, [$lookupObject->value]);
$lookupRow = db_fetch_row($selectStmt);
$fieldPrefix = nuObjKey($_POST['nuSTATE'], 'prefix', '') . $lookupObject->id;
nuRunQuery(nuReplaceHashVariables('DROP TABLE if EXISTS #TABLE_ID#'));
$_POST['nuHash']['TABLE_ID'] = $previousTableId;
$lookupValues = [];
$lookupValues[] = [$fieldPrefix, $lookupRow[0] ?? ''];
$lookupValues[] = [$fieldPrefix . 'code', $lookupRow[1] ?? ''];
$lookupValues[] = [$fieldPrefix . 'description', $lookupRow[2] ?? ''];
return $lookupValues;
}
function nuGetAllLookupList() {
$objectId = $_POST['nuSTATE']['object_id'];
$lookupCode = $_POST['nuSTATE']['code'];
$previousTableId = nuObjKey($_POST['nuHash'], 'TABLE_ID');
$_POST['nuHash']['TABLE_ID'] = nuTT();
$query = "SELECT sob_lookup_code, sob_lookup_description, sob_lookup_zzzzsys_form_id, sob_lookup_javascript FROM zzzzsys_object WHERE zzzzsys_object_id = ?";
$stmt = nuRunQuery($query, [$objectId]);
$result = db_fetch_object($stmt);
$codeField = $result->sob_lookup_code;
$descriptionField = $result->sob_lookup_description;
$formId = $result->sob_lookup_zzzzsys_form_id;
$javaScript = $result->sob_lookup_javascript;
nuBeforeBrowse($formId);
$formQuery = "SELECT sfo_primary_key, sfo_browse_sql FROM zzzzsys_form WHERE zzzzsys_form_id = ?";
$formStmt = nuRunQuery($formQuery, [$formId]);
$formResult = db_fetch_object($formStmt);
$primaryKeyField = $formResult->sfo_primary_key;
$sqlString = new nuSqlString(nuReplaceHashVariables($formResult->sfo_browse_sql));
$lookupQuery = "
SELECT $primaryKeyField, $codeField, $descriptionField
$sqlString->from
$sqlString->where
AND $codeField = ?
ORDER BY $codeField
";
$lookupQuery = nuReplaceHashVariables($lookupQuery);
$lookupStmt = nuRunQuery($lookupQuery, [$lookupCode]);
$lookupList = [];
if (db_num_rows($lookupStmt) == 0) {
$likeQuery = "
SELECT $primaryKeyField, $codeField, $descriptionField
$sqlString->from
$sqlString->where
AND ($codeField LIKE ? OR $descriptionField LIKE ?)
AND '$lookupCode' != ''
ORDER BY $codeField
";
$lookupStmt = nuRunQuery($likeQuery, ['%' . $lookupCode . '%', '%' . $lookupCode . '%']);
}
nuRunQuery(nuReplaceHashVariables('DROP TABLE if EXISTS #TABLE_ID#'));
$_POST['nuHash']['TABLE_ID'] = $previousTableId;
while ($row = db_fetch_row($lookupStmt)) {
$lookupList[] = $row;
}
$lookupResult = new stdClass;
$lookupResult->lookup_like = '';
$lookupResult->lookup_values = $lookupList;
$lookupResult->lookup_javascript = $javaScript;
return $lookupResult;
}
function nuLookupRecord() {
return $_POST['lookup_row'];
}
function nuSetFormValue($f, $v) {
$f = str_replace('#ROW#', $_POST['nuSTATE']['prefix'], $f);
$_POST['lookup_values'][] = [$f, $v];
}
function nuDataListOptions($input) {
$options = [];
$trimmedInput = nuTrim($input);
$upperInput = strtoupper($trimmedInput);
if (substr($upperInput, 0, 6) === 'SELECT' || substr($upperInput, 0, 4) === 'SHOW') {
// SQL query case
$queryResult = nuRunQuery($input);
if (nuErrorFound()) {
return;
}
while ($row = db_fetch_row($queryResult)) {
$options[] = $row;
}
} else if (substr($trimmedInput, 0, 1) === '[') {
// JSON array case
$options = nuJsonDecode($input);
} else {
// Plain string
return $input;
}
return $options;
}
function nuSelectAddOption($text, $value) {
$arr = [];
$arr[0] = $text;
$arr[1] = $value;
return $arr;
}
function nuSelectOptions($sql, $id) {
$options = [];
if (!empty($id)) {
$sql = str_replace("#OBJECT_ID#", $id, $sql);
}
$sqlWithHk = $sql;
$processedSql = nuReplaceHashVariables($sql);
$selectType = nuGetSelectType($processedSql);
switch ($selectType) {
case 'query':
$stmt = nuRunQueryString($processedSql, $sqlWithHk);
if (nuErrorFound()) {
return;
}
while ($row = db_fetch_row($stmt)) {
$options[] = $row;
}
break;
case 'array':
$arr = nuJsonDecode($processedSql);
foreach ($arr as $item) {
$options[] = nuSelectAddOption($item, $item);
}
break;
case 'languages':
foreach (glob("languages/*.sql") as $file) {
$baseName = basename($file, '.sql');
$options[] = nuSelectAddOption($baseName, $baseName);
}
break;
case 'showTables':
$stmt = nuRunQuery($sql);
while ($row = db_fetch_row($stmt)) {
if (!nuStringStartsWith('__', $row[0])) {
$options[] = nuSelectAddOption($row[0], $row[0]);
}
}
break;
case 'delimited':
default:
$parts = explode('|', nuRemoveNonCharacters($processedSql));
for ($i = 0, $count = count($parts); $i < $count; $i++) {
$selectValue = $parts[$i];
$selectDescription = isset($parts[$i + 1]) ? $parts[$i + 1] : 'Undefined';
$options[] = nuSelectAddOption($selectValue, $selectDescription);
$i++; // Skip the next element (used as description)
}
break;
}
return $options;
}
function nuRemoveNonCharacters($s) {
$replace_pairs = array(
"\t" => '',
"\n" => '',
"\r" => ''
);
return strtr($s, $replace_pairs);
}
function nuGetSubformRecords($record, $tabs) {
$formId = nuGetEditForm($record->sob_subform_zzzzsys_form_id, '');
$whereClause = $formId->where == '' ? '' : ' AND (' . substr($formId->where, 6) . ')';
$selectQuery = "SELECT `$formId->primary_key` $formId->from WHERE (IFNULL(`$record->sob_subform_foreign_key`,'-1') = '$record->subform_fk') $whereClause $formId->order";
$originalRecordId = $_POST['nuHash']['RECORD_ID'];
$queryResult = nuRunQuery($selectQuery);
$subformRecords = [];
$tabs = nuBuildTabList($record->sob_subform_zzzzsys_form_id);
while ($row = db_fetch_row($queryResult)) {
$_POST['nuHash']['RECORD_ID'] = $row[0];
$formObject = nuGetFormObject($record->sob_subform_zzzzsys_form_id, $row[0], count($subformRecords), $tabs);
$formObject->foreign_key = $record->subform_fk;
$formObject->foreign_key_name = $record->sob_subform_foreign_key;
$subformRecords[] = $formObject;
}
$_POST['nuHash']['RECORD_ID'] = -1;
$newFormObject = nuGetFormObject($record->sob_subform_zzzzsys_form_id, -1, count($subformRecords), $tabs);
$newFormObject->foreign_key = $record->subform_fk;
$newFormObject->foreign_key_name = $record->sob_subform_foreign_key;
$subformRecords[] = $newFormObject;
$_POST['nuHash']['RECORD_ID'] = $originalRecordId;
return $subformRecords;
}
function nuBuildTabList($formId) {
$tabIndex = 0;
$tabList = [];
$query = "
SELECT zzzzsys_tab.*
FROM zzzzsys_tab
INNER JOIN zzzzsys_object ON sob_all_zzzzsys_form_id = syt_zzzzsys_form_id
GROUP BY `zzzzsys_tab_id`, `syt_zzzzsys_form_id`
HAVING syt_zzzzsys_form_id = ?
ORDER BY `syt_order`;
";
$result = nuRunQuery($query, [$formId]);
while ($row = db_fetch_object($result)) {
$row->number = $tabIndex;
$tabIndex++;
$tabList[] = $row;
}
return $tabList;
}
function nuRefineTabList($tabs) {
$refinedTabList = [];
$tabCount = count($tabs);
for ($index = 0; $index < $tabCount; $index++) {
$refinedTabList[] = [
'title' => $tabs[$index]->syt_title,
'id' => $tabs[$index]->zzzzsys_tab_id,
'help' => $tabs[$index]->syt_help,
'access' => $tabs[$index]->syt_access ?? null
];
}
return $refinedTabList;
}
function nuReorderTabs($recordID) {
$sql = "
SELECT zzzzsys_tab_id
FROM zzzzsys_tab
WHERE syt_zzzzsys_form_id = ?
ORDER BY syt_order
";
$result = nuRunQuery($sql, [$recordID]);
$order = 10;
while ($row = db_fetch_object($result)) {
$updateSql = "
UPDATE zzzzsys_tab
SET syt_order = ?
WHERE zzzzsys_tab_id = ?
";
nuRunQuery($updateSql, [$order, $row->zzzzsys_tab_id]);
$order += 10;
}
}
function nuReorderBrowse($formId) {
$sql = "
SELECT zzzzsys_browse_id
FROM zzzzsys_browse
WHERE sbr_zzzzsys_form_id = ?
ORDER BY sbr_order
";
$result = nuRunQuery($sql, [$formId]);
$order = 10;
while ($row = db_fetch_object($result)) {
$updateSql = "
UPDATE zzzzsys_browse
SET sbr_order = ?
WHERE zzzzsys_browse_id = ?
";
nuRunQuery($updateSql, [$order, $row->zzzzsys_browse_id]);
$order += 10;
}
}
function nuGetSQLValue($sql) {
$trimmedSql = nuReplaceHashVariables(nuTrim($sql));
if (nuTrim($trimmedSql) == '') {
return '';
} else {
$queryResult = nuRunQuery($trimmedSql);
$row = db_fetch_row($queryResult);
return $row[0];
}
}
function nuBrowseColumns($form) {
if ($form->record_id != '') {
return [];
}
nuBeforeBrowse($form->id);
$query = "SELECT * FROM zzzzsys_browse WHERE sbr_zzzzsys_form_id = ? ORDER BY sbr_order";
$queryResult = nuRunQuery($query, [$form->id]);
$columns = [];
while ($row = db_fetch_object($queryResult)) {
$columns[] = (object) [
'title' => $row->sbr_title,
'display' => $row->sbr_display,
'align' => $row->sbr_align,
'width' => $row->sbr_width,
'order' => $row->sbr_order,
'format' => $row->sbr_format,
'id' => $row->zzzzsys_browse_id
];
}
return $columns;
}
function nuBrowseExpandNuEqualsFilter($sql) {
$pattern = '/nu_filter_match\s*\(\s*([\'"])([^\'"]+)\1\s*,\s*([\'"])([^\'"]+)\3(?:\s*,\s*([\'"])([^\'"]*)\5)?\s*\)/i';
return preg_replace_callback($pattern, function ($m) {
$column = $m[2]; // e.g., column_name
$token = $m[4]; // e.g., 68a7263f0b3c449
$emptyValue = isset($m[6]) ? $m[6] : '-1'; // empty value substitution
$ph = "#{$token}_filter#";
$block = << '#' AND TRIM('{$ph}') <> ''
AND (
(FIND_IN_SET('{$emptyValue}', '{$ph}') > 0 AND IFNULL({$column},'') = '')
OR FIND_IN_SET({$column}, '{$ph}') > 0
)
)
)
SQL;
return $block;
}, $sql);
}
function nuBrowseRows($f) {
if (nuTrim($f->record_id) != '') {
return [];
}
$P = $_POST['nuSTATE'];
$rows = $P['rows'] ?? 0;
if ($rows == -1) {
$rows = nuFormProperties($f->form_id, 'sfo_browse_rows_per_page')->sfo_browse_rows_per_page;
}
$rows = nuRowsPerPage($rows);
$page_number = $P['page_number'] ?? 0;
$nosearch_columns = $_POST['nuSTATE']['nosearch_columns'] ?? null;
$start = $page_number * $rows;
$search = str_replace(''', "'", nuObjKey($P, 'search', ''));
$filter = str_replace(''', "'", nuObjKey($P, 'filter', ''));
$s = "SELECT sfo_browse_sql FROM zzzzsys_form WHERE zzzzsys_form_id = ?";
$t = nuRunQuery($s, [$f->id]);
$r = db_fetch_object($t);
if (nuTrim($r->sfo_browse_sql) == '') {
return [[], 0];
}
$S = nuBrowseExpandNuEqualsFilter($r->sfo_browse_sql);
$S = new nuSqlString(nuReplaceHashVariables($S));
$S->addField('$' . $f->primary_key . '$');
$displayContainsPK = false;
$countBrowseColumns = count($f->browse_columns);
for ($i = 0; $i < $countBrowseColumns; $i++) {
$d = $f->browse_columns[$i]->display;
if ($d == $f->primary_key)
$displayContainsPK = true;
$S->addField($d);
}
$flds = [];
$fields = array_slice($S->fields, 1);
if ($nosearch_columns === null) {
$_POST['nuSTATE']['nosearch_columns'] = [];
}
$countFields = count($fields);
for ($i = 0; $i < $countFields; $i++) {
if (!in_array($i, $_POST['nuSTATE']['nosearch_columns'])) {
$flds[] = $fields[$i];
}
}
$where = nuTrim(nuBrowseWhereClause($flds, $filter . ' ' . $search));
$__x = nuHash();
$like = $__x['like'] ?? '';
unset($__x);
$like = str_replace('\\"', '"', $like);
$haswhere = $where != '()';
$haslike = $like != '';
$hardwhere = $S->getWhere();
if ($haslike && $haswhere) {
$S->setWhere(" $hardwhere AND $like AND $where");
}
if ($haslike && !$haswhere) {
$S->setWhere(" $hardwhere AND $like");
}
if (!$haslike && $haswhere) {
$S->setWhere(" $hardwhere AND $where");
}
if (isset($P['sort']) && $P['sort'] != '-1') {
$S->setOrderBy(' ORDER BY ' . nuBrowseRemoveFieldAlias($S->fields[$P['sort'] + 1]) . ' ' . $P['sort_direction']);
}
$a = [];
$s = nuReplaceHashVariables($S->SQL);
$S->SQL = str_replace('$' . $f->primary_key . '$', $f->primary_key, $S->SQL);
if ($displayContainsPK) {
$sCount = str_replace('$' . $f->primary_key . '$,', '', $s);
} else {
$sCount = str_replace('$' . $f->primary_key . '$', $f->primary_key, $s);
}
$t = nuRunQuery('SELECT COUNT(*) FROM (' . $sCount . ') nuTCount');
$rowData = !nuErrorFound() ? db_fetch_row($t)[0] : 0;
$s .= " LIMIT " . ($start < 0 ? 0 : $start) . ", $rows";
$s = str_replace('$' . $f->primary_key . '$', $f->primary_key, $s);
$t = nuRunQuery($s);
while ($r = db_fetch_row($t)) {
$a[] = $r;
}
nuRunQuery(nuReplaceHashVariables('DROP TABLE IF EXISTS `#TABLE_ID#`'));
return [$a, $rowData, $S->SQL];
}
function nuBrowseWhereClause($searchFields, $searchString, $returnArray = false) {
$pos = -1;
$start = -1;
$where = [];
$phrases = [];
$SEARCHES = [];
$wordSearches = [];
$highlight = [];
while (true) {
$pos = strpos($searchString, '"', $pos + 1); //-- search for double quotes
if ($pos === false) {
break; //-- stop searching
} else {
if ($start == -1) {
$start = $pos; //-- find start position of phrase
} else {
$phrases[] = "$start," . ($pos + 1); //-- add start and end to array
$start = -1;
}
}
}
$countPhrases = count($phrases);
for ($i = 0; $i < $countPhrases; $i++) {
$p = explode(',', $phrases[$i]);
$SEARCHES[] = substr($searchString, $p[0], $p[1] - $p[0]);
}
$countS = count($SEARCHES);
for ($i = 0; $i < $countS; $i++) {
$pos = strpos($searchString, '-' . $SEARCHES[$i]); //-- check for a preceeding minus
if ($pos === false) {
$task[] = 'include';
$searchString = str_replace($SEARCHES[$i], ' ', $searchString); //-- include phrase
$highlight[] = substr($SEARCHES[$i], 1, -1);
} else {
$task[] = 'exclude';
$searchString = str_replace('-' . $SEARCHES[$i], ' ', $searchString); //-- remove phrase
}
$SEARCHES[$i] = ' "%' . substr($SEARCHES[$i], 1, -1) . '%" ';
}
$wordSearches = explode(' ', $searchString);
$quo = '"';
$task = [];
$countWordSearches = count($wordSearches);
for ($i = 0; $i < $countWordSearches; $i++) {
if (strlen($wordSearches[$i]) > 0) {
if (substr($wordSearches[$i], 0, 1) == '-' and strlen($wordSearches[$i]) > 1) { //-- check for a preceeding minus
$task[] = 'exclude';
$SEARCHES[] = $quo . '%' . nuAddSlashes(substr($wordSearches[$i], 1)) . '%' . $quo; //-- add word to exclude
} else {
$task[] = 'include';
$SEARCHES[] = $quo . '%' . nuAddSlashes($wordSearches[$i]) . '%' . $quo; //-- add word to include
$highlight[] = $wordSearches[$i];
}
}
}
$countS = count($SEARCHES);
for ($i = 0; $i < $countS; $i++) { //-- search for (or exclude) these strings
$include = [];
$exclude = [];
$countSearchFields = count($searchFields);
for ($SF = 0; $SF < $countSearchFields; $SF++) { //-- loop through searchable fields
if ($task[$i] == 'include') {
$include[] = 'CONVERT(' . nuBrowseRemoveFieldAlias($searchFields[$SF]) . ' USING UTF8MB4) LIKE ' . $SEARCHES[$i];
} else {
$exclude[] = 'CONVERT(' . nuBrowseRemoveFieldAlias($searchFields[$SF]) . ' USING UTF8MB4) NOT LIKE ' . $SEARCHES[$i];
}
}
if (count($include) > 0) {
$where[] = ' (' . implode(' OR ', $include) . ') ';
}
if (count($exclude) > 0) {
$where[] = ' (' . implode(' AND ', $exclude) . ') ';
}
}
if ($returnArray) {
return $highlight;
} else {
return ' (' . implode(' AND ', $where) . ') ';
}
}
function nuBrowseRemoveFieldAlias($field) {
$field = preg_replace_callback('/\sAS\s/i', function ($match) {
return strtolower($match[0]);
}, $field);
$pos = strrpos(strtolower($field), " as ");
if ($pos !== false) {
return substr($field, 0, $pos);
}
return $field;
}
function nuGatherFormAndSessionData($home, $globalAccess) {
$formAndSessionData = new stdClass;
$nuState = $_POST['nuSTATE'];
$sessionData = $_SESSION['nubuilder_session_data'];
$sessionId = $sessionData['SESSION_ID'];
$formAndSessionData->record_id = $nuState['record_id'] ?? "-1";
$formId = $nuState['form_id'] ?? '';
if ($formId == 'home_id') {
$formId = $globalAccess ? $sessionData['GLOBEADMIN_HOME'] : $sessionData['HOME_ID'];
}
if (nuStringStartsWith('code:', $formId, true)) {
$formId = db_fetch_value('zzzzsys_form', 'sfo_code', substr($formId, 5), 'zzzzsys_form_id');
}
if ($formId) {
$formAndSessionData->form_id = $formId;
} else {
$formAndSessionData->form_id = $home == '' ? $sessionData['GLOBEADMIN_HOME'] : $home;
}
if (isset($nuState['login_form_id'])) {
if ($nuState['login_form_id'] != '') {
$formAndSessionData->form_id = $nuState['login_form_id'];
}
}
if (isset($nuState['login_form_id'])) { //-- check empty form_id not empty record_id
if ($nuState['login_form_id'] != '') {
$formAndSessionData->record_id = $nuState['login_record_id'];
}
}
$formAndSessionData->session_id = $sessionId;
$formAndSessionData->call_type = $nuState['call_type'];
$formAndSessionData->filter = $_POST['nuFilter'] ?? '';
$formAndSessionData->errors = [];
$formAndSessionData->translation = $sessionData['translation'];
if ($formAndSessionData->form_id != null) {
$formAndSessionData->dimensions = nuFormDimensions($formAndSessionData->form_id);
}
if (!$globalAccess && $formAndSessionData->form_id != 'nuhome') {
$getAccessFromSessionTableQRY = nuRunQuery("SELECT sss_access FROM zzzzsys_session WHERE zzzzsys_session_id = ? ", [$sessionId]);
$getAccessFromSessionTableOBJ = db_fetch_object($getAccessFromSessionTableQRY);
$access = nuJsonDecode($getAccessFromSessionTableOBJ->sss_access);
$callType = $formAndSessionData->call_type;
if ($callType == 'getreport') {
$r = nuReportAccessList($access);
if (!in_array($formAndSessionData->record_id, $r)) { //form_id is record_id for getreport
$stmt = nuRunQuery("SELECT sph_code FROM zzzzsys_report WHERE zzzzsys_report_id = ?", [$formAndSessionData->record_id]);
nuDisplayErrorAccessDenied($callType, $stmt);
}
}
if ($callType == 'getphp') {
$p = nuProcedureAccessList($access);
if (!in_array($formAndSessionData->record_id, $p)) { //form_id is record_id for getphp^
$stmt = nuRunQuery("SELECT sph_code FROM zzzzsys_php WHERE zzzzsys_php_id = ? AND IFNULL(sph_status,'1') = '1'", [$formAndSessionData->record_id]);
nuDisplayErrorAccessDenied($callType, $stmt);
}
}
$f = nuFormAccessList($access); //-- form list including forms id used in reports and procedures
if (!in_array($formAndSessionData->form_id, $f) && ($callType == 'getform' || $formAndSessionData->call_type == 'login')) {
$stmt = nuRunQuery("SELECT sfo_code FROM zzzzsys_form WHERE zzzzsys_form_id = ?", [$formAndSessionData->form_id]);
nuDisplayErrorAccessDenied($callType, $stmt);
}
}
$formAndSessionData->errors = $_POST['nuErrors'];
return $formAndSessionData;
}
function nuDisplayErrorAccessDenied($callType, $stmt) {
if (db_num_rows($stmt) === 1) {
$obj = db_fetch_row($stmt);
$code = " ({$obj[0]})";
} else {
$code = '';
}
if ($callType == 'getform') {
nuDisplayError("Access To Form Denied$code");
} elseif ($callType == 'getphp') {
nuDisplayError("Access To Procedure Denied$code");
} elseif ($callType == 'getreport') {
nuDisplayError("Access To Report Denied$code");
}
}
function nuGetFormPermission($formId, $permissionField) {
$sql = "SELECT $permissionField FROM zzzzsys_access_form WHERE slf_zzzzsys_access_id = ? AND slf_zzzzsys_form_id = ?";
$stmt = nuRunQuery($sql, [$_POST['nuHash']['USER_GROUP_ID'], $formId]);
if (db_num_rows($stmt) === 1) {
$value = db_fetch_row($stmt);
$value = $value[0] == null || $value[0] == '' ? null : (int) $value[0];
} else {
$value = null;
}
return $value;
}
function nuGetFormStatus($formId) {
return db_fetch_value('zzzzsys_form', 'zzzzsys_form_id', $formId, 'sfo_status');
}
function nuFormAccessList($accessData) {
$accessList = [];
$queryResult = nuRunQuery("SELECT zzzzsys_form_id FROM zzzzsys_form WHERE sfo_type = 'subform'");
while ($row = db_fetch_row($queryResult)) {
$accessList[] = $row[0];
}
$formCount = count($accessData->forms);
for ($formIndex = 0; $formIndex < $formCount; $formIndex++) {
$accessList[] = $accessData->forms[$formIndex][0];
}
$reportCount = count($accessData->reports);
for ($reportIndex = 0; $reportIndex < $reportCount; $reportIndex++) {
$accessList[] = $accessData->reports[$reportIndex][1];
}
$procedureCount = count($accessData->procedures);
for ($procedureIndex = 0; $procedureIndex < $procedureCount; $procedureIndex++) {
$accessList[] = $accessData->procedures[$procedureIndex][1];
}
$userAccess = nuGetUserAccess();
$accessList[] = $userAccess['HOME_ID'];
unset($userAccess);
return $accessList;
}
function nuProcedureAccessList($j) {
$a = [];
$count = count($j->procedures);
for ($i = 0; $i < $count; $i++) {
$a[] = $j->procedures[$i][0];
}
return $a;
}
function nuReportAccessList($j) {
$a = [];
$count = count($j->reports);
for ($i = 0; $i < $count; $i++) {
$a[] = $j->reports[$i][0];
}
return $a;
}
function nuButtons($formid, $POST) {
$t = nuRunQuery("SELECT sss_access FROM zzzzsys_session WHERE zzzzsys_session_id = ? ", [$_SESSION['nubuilder_session_data']['SESSION_ID']]);
if (db_num_rows($t) == 0) {
return [array('Add' => 0, 'Print' => 0, 'Save' => 0, 'Clone' => 0, 'Delete' => 0, 'Run' => 'nuRunPHP("' . '' . '")', 'RunHidden' => ''), '', ''];
}
$r = db_fetch_object($t);
$nuJ = nuJsonDecode($r->sss_access);
$_POST['forms'] = $nuJ->forms;
$_POST['reports'] = $nuJ->reports;
$_POST['procedures'] = $nuJ->procedures;
$_POST['session'] = $nuJ->session;
$C = '';
$D = '';
$a = nuFormAccess($formid, $nuJ->forms);
$c = $POST['call_type'];
$recordID = nuObjKey($POST, 'record_id');
if ($c == 'getphp' or $c == 'getreport') {
$s = 'SELECT sph_code, sph_description, sph_run FROM zzzzsys_php WHERE zzzzsys_php_id = ? ';
$t = nuRunQuery($s, [$recordID]);
$P = db_fetch_object($t);
$s = 'SELECT sre_code, sre_description FROM zzzzsys_report WHERE zzzzsys_report_id = ? ';
$t = nuRunQuery($s, [$recordID]);
$R = db_fetch_object($t);
} else {
$s = 'SELECT sph_code, sph_description, sph_run FROM zzzzsys_php WHERE sph_code = ? ';
$t = nuRunQuery($s, [$recordID]);
$P = db_fetch_object($t);
$s = 'SELECT sre_code, sre_description FROM zzzzsys_report WHERE sre_code = ? ';
$t = nuRunQuery($s, [$recordID]);
$R = db_fetch_object($t);
}
if ($c == 'getphp') {
$C = $P->sph_code;
$D = $P->sph_description;
if ($P->sph_run == 'hide') {
return [array('Add' => 0, 'Print' => 0, 'Save' => 0, 'Clone' => 0, 'Delete' => 0, 'Run' => '', 'RunHidden' => 'nuRunPHPHidden("' . $C . '")'), $C, $D];
} else {
return [array('Add' => 0, 'Print' => 0, 'Save' => 0, 'Clone' => 0, 'Delete' => 0, 'Run' => 'nuRunPHP("' . $C . '")', 'RunHidden' => ''), $C, $D];
}
} else
if ($c == 'getreport') {
$C = $R->sre_code;
$D = $R->sre_description;
return [array('Add' => 0, 'Print' => 0, 'Save' => 0, 'Clone' => 0, 'Delete' => 0, 'Run' => 'nuRunReport("' . $C . '")', 'RunHidden' => ''), $C, $D];
} else {
return [array('Add' => $a[0], 'Print' => $a[1], 'Save' => $a[2], 'Clone' => $a[3], 'Delete' => $a[4], 'Run' => '', 'RunHidden' => ''), $C, $D];
}
}
function nuRunCode($P) {
$s = 'SELECT sph_code FROM zzzzsys_php WHERE zzzzsys_php_id = ? ';
$t = nuRunQuery($s, [$P['record_id']]);
$c = db_fetch_object($t)->sph_code;
$s = 'SELECT sre_code FROM zzzzsys_report WHERE zzzzsys_report_id = ? ';
$t = nuRunQuery($s, [$P['record_id']]);
if (db_fetch_object($t)->sre_code != '') {
$c = db_fetch_object($t)->sre_code;
}
return $c;
}
function nuRunDescription($P) {
$s = 'SELECT sph_description FROM zzzzsys_php WHERE zzzzsys_php_id = ? ';
$t = nuRunQuery($s, [$P['record_id']]);
$d = db_fetch_object($t)->sph_description;
$s = 'SELECT sre_code FROM zzzzsys_report WHERE zzzzsys_report_id = ? ';
$t = nuRunQuery($s, [$P['record_id']]);
if (db_fetch_object($t)->sre_code != '') {
$d = db_fetch_object($t)->sre_description;
}
return $d;
}
function nuFormAccess($s, $a) {
if (nuGlobalAccess(true)) {
return ['1', '1', '1', '1', '1'];
}
if ($a !== null) {
$count = count($a);
for ($i = 0; $i < $count; $i++) {
$F = $a[$i];
if ($s == $F[0]) {
return [$F[1], $F[2], $F[3], $F[4], $F[5]]; //-- Add, Print, Save, Clone, Delete
}
}
}
return ['0', '0', '0', '0', '0'];
}
function nuFormDimensions($formId) {
$dimensionList = [];
// Fetch form settings
$formQuery = nuRunQuery(
"SELECT sfo_browse_row_height, sfo_browse_rows_per_page
FROM zzzzsys_form
WHERE zzzzsys_form_id = ?",
[$formId]
);
$formConfig = db_fetch_object($formQuery);
$settingRowHeight = $formConfig->sfo_browse_row_height ?? 0;
$settingRowsPerPage = $formConfig->sfo_browse_rows_per_page ?? 0;
// Static heights
$titleAreaHeight = 57; // browse title
$footerAreaHeight = 25; // browse footer
// Resolve defaults if settings are zero
$rowHeight = intval($settingRowHeight) === 0 ? 25 : $settingRowHeight;
$rowsPerPage = intval($settingRowsPerPage) === 0 ? 25 : $settingRowsPerPage;
// Prepare variables for computing form/edit and grid dimensions
$objQuery = nuRunQuery("SELECT * FROM zzzzsys_object WHERE sob_all_zzzzsys_form_id = ?", [$formId]);
$maxEditHeight = 0;
$maxEditWidth = 0;
$maxGridRowHeight = 0;
$totalGridWidth = 0;
// Iterate over each object on the form
while ($obj = db_fetch_object($objQuery)) {
// Compute width for edit form
if ($obj->sob_all_type === 'lookup') {
$calculatedWidth = $obj->sob_all_left
+ $obj->sob_all_width
+ $obj->sob_lookup_description_width
+ 40;
$totalGridWidth += $obj->sob_all_width
+ $obj->sob_lookup_description_width
+ 40;
} else {
$calculatedWidth = $obj->sob_all_left
+ $obj->sob_all_width
+ 40;
$totalGridWidth += $obj->sob_all_width + 4;
}
$maxEditWidth = max($maxEditWidth, $calculatedWidth);
// Compute height for each object
if ($obj->sob_all_type === 'textarea') {
$objectHeight = $obj->sob_all_height + 16;
} elseif (!empty($obj->sob_select_2) && $obj->sob_select_2 === '1') {
$objectHeight = $obj->sob_all_height + 13;
} else {
$objectHeight = $obj->sob_all_height;
}
$maxEditHeight = max($maxEditHeight, $obj->sob_all_top + $objectHeight);
$maxGridRowHeight = max($maxGridRowHeight, $objectHeight, 29);
}
// Calculate browse dimensions
$browseHeight = $titleAreaHeight
+ ($rowsPerPage * $rowHeight)
+ $footerAreaHeight;
$browseWidth = nuGetBrowseWidth($formId);
// Assemble dimension arrays
$gridDimensions = ['height' => $maxGridRowHeight, 'width' => $totalGridWidth];
$browseDimensions = ['height' => $browseHeight, 'width' => $browseWidth];
$editDimensions = ['height' => $maxEditHeight, 'width' => $maxEditWidth];
// (Legacy list of dimensions — preserved for backward compatibility)
$dimensionList[] = $browseHeight;
$dimensionList[] = $browseWidth;
$dimensionList[] = $maxEditHeight;
$dimensionList[] = $maxEditWidth;
$dimensionList[] = $maxEditHeight;
$dimensionList[] = $maxEditWidth + 50;
$dimensionList[] = $maxGridRowHeight;
$dimensionList[] = $totalGridWidth + 55;
$dimensionList[] = [
'browse' => $browseDimensions,
'edit' => $editDimensions,
'grid' => $gridDimensions,
];
return [
'browse' => $browseDimensions,
'edit' => $editDimensions,
'grid' => $gridDimensions,
];
}
function nuGetBrowseWidth($f) {
$t = nuRunQuery("SELECT SUM(sbr_width) FROM zzzzsys_browse WHERE sbr_zzzzsys_form_id = ? ", [$f]);
$r = db_fetch_row($t);
return db_num_rows($t) > 0 ? $r[0] : 0;
}
function nuIsForm($i) {
$s = "SELECT zzzzsys_form_id_id FROM zzzzsys_form WHERE zzzzsys_form_id = ?";
$t = nuRunQuery($s, [$i]);
$r = db_fetch_object($t);
return db_num_rows($t) > 0;
}
function nuIsProcedure($i) {
$s = "SELECT zzzzsys_php_id FROM zzzzsys_php WHERE zzzzsys_php_id = ?";
$t = nuRunQuery($s, [$i]);
$r = db_fetch_object($t);
return db_num_rows($t) > 0;
}
function nuIsReport($i) {
$s = "SELECT zzzzsys_report_id FROM zzzzsys_report WHERE zzzzsys_report_id = ?";
$t = nuRunQuery($s, [$i]);
$r = db_fetch_object($t);
return db_num_rows($t) > 0;
}
function nuSetupButtons($f, $t) {
if ($t == 'Report') {
nuAddPrintButtons($f, 'Run', 'Report');
nuAddPrintButtons($f, 'Email', 'Report');
} else if ($t == 'PHP') {
nuAddPrintButtons($f, 'Run', 'PHP');
}
}
function nuAddPrintButtons($f, $t, $a) {
$i = sizeof($f->forms[0]->buttons);
$f->forms[0]->buttons[$i][0] = $t;
$f->forms[0]->buttons[$i][1] = $t . $a;
}
function nuAddJavaScript($js, $bc = false, $first = false) {
$extraJSKey = $bc ? 'EXTRAJS_BC' : 'EXTRAJS';
if (isset($GLOBALS[$extraJSKey])) {
$extraJS = $GLOBALS[$extraJSKey];
if ($first) {
$extraJS = $js . "\n\n" . $extraJS;
} else {
$extraJS .= "\n\n" . $js;
}
$GLOBALS[$extraJSKey] = $extraJS;
}
}
function nuPreloadImages($a) {
$js = '';
$count = count($a);
for ($i = 0; $i < $count; $i++) {
$s = "
SELECT sfi_code, sfi_json
FROM zzzzsys_file
WHERE sfi_code = ?
";
$t = nuRunQuery($s, [$a[$i]]);
$r = db_fetch_object($t);
$tr = nuTrim($r->sfi_code);
$js = $js . "\nnuImages['$tr'] = '" . nuAddSlashes($r->sfi_json) . "';";
}
nuAddJavaScript($js);
}