mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
UNIFIAPI v0.3
This commit is contained in:
2
.github/workflows/docker_rewrite.yml
vendored
2
.github/workflows/docker_rewrite.yml
vendored
@@ -11,7 +11,7 @@ on:
|
|||||||
- rewrite
|
- rewrite
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker_dev:
|
docker_rewrite:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
permissions:
|
permissions:
|
||||||
|
|||||||
@@ -182,10 +182,6 @@ function showModalPopupForm(
|
|||||||
$(`#${prefix}-cancel`).html(btnCancel);
|
$(`#${prefix}-cancel`).html(btnCancel);
|
||||||
$(`#${prefix}-OK`).html(btnOK);
|
$(`#${prefix}-OK`).html(btnOK);
|
||||||
|
|
||||||
if (callbackFunction != null) {
|
|
||||||
modalCallbackFunction = callbackFunction;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (triggeredBy != null) {
|
if (triggeredBy != null) {
|
||||||
$('#'+prefix).attr("data-myparam-triggered-by", triggeredBy)
|
$('#'+prefix).attr("data-myparam-triggered-by", triggeredBy)
|
||||||
}
|
}
|
||||||
@@ -242,6 +238,31 @@ function showModalPopupForm(
|
|||||||
// $(`#${prefix}-field`).focus();
|
// $(`#${prefix}-field`).focus();
|
||||||
// }, 500);
|
// }, 500);
|
||||||
|
|
||||||
|
// Bind OK button click event
|
||||||
|
$(`#${prefix}-OK`).off("click").on("click", function() {
|
||||||
|
let settingsArray = [];
|
||||||
|
if (Array.isArray(popupFormJson)) {
|
||||||
|
popupFormJson.forEach(field => {
|
||||||
|
collectSetting(
|
||||||
|
`${parentSettingKey}_popupform`, // prefix
|
||||||
|
field.function + '_in', // setCodeName + sourceSuffixes
|
||||||
|
field.type, // setType (object)
|
||||||
|
settingsArray
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Collected popup form settings:", settingsArray);
|
||||||
|
|
||||||
|
if (typeof modalCallbackFunction === "function") {
|
||||||
|
modalCallbackFunction(settingsArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(`#${prefix}`).modal("hide");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Show modal
|
// Show modal
|
||||||
$(`#${prefix}`).modal("show");
|
$(`#${prefix}`).modal("show");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -993,6 +993,96 @@ function genListWithInputSet(options, valuesArray, targetField, transformers, pl
|
|||||||
$("#" + placeholder).replaceWith(listHtml);
|
$("#" + placeholder).replaceWith(listHtml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
// Collects a setting based on code name
|
||||||
|
function collectSetting(prefix, setCodeName, setType, settingsArray) {
|
||||||
|
// Parse setType if it's a JSON string
|
||||||
|
const setTypeObject = (typeof setType === "string")
|
||||||
|
? JSON.parse(processQuotes(setType))
|
||||||
|
: setType;
|
||||||
|
|
||||||
|
const dataType = setTypeObject.dataType;
|
||||||
|
|
||||||
|
// Pick element with input value
|
||||||
|
let elements = setTypeObject.elements.filter(el => el.elementHasInputValue === 1);
|
||||||
|
let elementWithInputValue = elements.length === 0
|
||||||
|
? setTypeObject.elements[setTypeObject.elements.length - 1]
|
||||||
|
: elements[0];
|
||||||
|
|
||||||
|
const { elementType, elementOptions = [], transformers = [] } = elementWithInputValue;
|
||||||
|
|
||||||
|
const opts = handleElementOptions('none', elementOptions, transformers, val = "");
|
||||||
|
|
||||||
|
// Map of handlers
|
||||||
|
const handlers = {
|
||||||
|
datatableString: () => {
|
||||||
|
const value = collectTableData(`#${setCodeName}_table`);
|
||||||
|
return btoa(JSON.stringify(value));
|
||||||
|
},
|
||||||
|
simpleValue: () => {
|
||||||
|
let value = $(`#${setCodeName}`).val();
|
||||||
|
return applyTransformers(value, transformers);
|
||||||
|
},
|
||||||
|
checkbox: () => {
|
||||||
|
let value = $(`#${setCodeName}`).is(':checked') ? 1 : 0;
|
||||||
|
if (dataType === "boolean") {
|
||||||
|
value = value === 1 ? "True" : "False";
|
||||||
|
}
|
||||||
|
return applyTransformers(value, transformers);
|
||||||
|
},
|
||||||
|
array: () => {
|
||||||
|
let temps = [];
|
||||||
|
if (opts.isOrdeable) {
|
||||||
|
temps = $(`#${setCodeName}`).val();
|
||||||
|
} else {
|
||||||
|
const sel = $(`#${setCodeName}`).attr("my-editable") === "true" ? "" : ":selected";
|
||||||
|
$(`#${setCodeName} option${sel}`).each(function() {
|
||||||
|
const vl = $(this).val();
|
||||||
|
if (vl !== '') {
|
||||||
|
temps.push(applyTransformers(vl, transformers));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return JSON.stringify(temps);
|
||||||
|
},
|
||||||
|
none: () => "",
|
||||||
|
json: () => {
|
||||||
|
let value = $(`#${setCodeName}`).val();
|
||||||
|
value = applyTransformers(value, transformers);
|
||||||
|
return JSON.stringify(value, null, 2);
|
||||||
|
},
|
||||||
|
fallback: () => {
|
||||||
|
console.error(`[collectSetting] Couldn't determine how to handle (${setCodeName}|${dataType}|${opts.inputType})`);
|
||||||
|
let value = $(`#${setCodeName}`).val();
|
||||||
|
return applyTransformers(value, transformers);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Select handler key
|
||||||
|
let handlerKey;
|
||||||
|
if (dataType === "string" && elementType === "datatable") {
|
||||||
|
handlerKey = "datatableString";
|
||||||
|
} else if (dataType === "string" ||
|
||||||
|
(dataType === "integer" && (opts.inputType === "number" || opts.inputType === "text"))) {
|
||||||
|
handlerKey = "simpleValue";
|
||||||
|
} else if (opts.inputType === "checkbox") {
|
||||||
|
handlerKey = "checkbox";
|
||||||
|
} else if (dataType === "array") {
|
||||||
|
handlerKey = "array";
|
||||||
|
} else if (dataType === "none") {
|
||||||
|
handlerKey = "none";
|
||||||
|
} else if (dataType === "json") {
|
||||||
|
handlerKey = "json";
|
||||||
|
} else {
|
||||||
|
handlerKey = "fallback";
|
||||||
|
}
|
||||||
|
|
||||||
|
const value = handlers[handlerKey]();
|
||||||
|
settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
|
return settingsArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
// Generate the form control for setting
|
// Generate the form control for setting
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button id="modal-form-cancel" type="button" class="btn btn-outline pull-left" style="min-width: 80px;" data-dismiss="modal"> Cancel </button>
|
<button id="modal-form-cancel" type="button" class="btn btn-outline pull-left" style="min-width: 80px;" data-dismiss="modal"> Cancel </button>
|
||||||
<button id="modal-form-OK" type="button" class="btn btn-outline btn-modal-submit" style="min-width: 80px;" onclick="modalDefaultForm()"> OK </button>
|
<button id="modal-form-OK" type="button" class="btn btn-outline btn-modal-submit" style="min-width: 80px;" > OK </button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -553,7 +553,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
|
|||||||
}, 1500);
|
}, 1500);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var settingsArray = [];
|
let settingsArray = [];
|
||||||
|
|
||||||
// collect values for each of the different input form controls
|
// collect values for each of the different input form controls
|
||||||
// get settings to determine setting type to store values appropriately
|
// get settings to determine setting type to store values appropriately
|
||||||
@@ -565,121 +565,123 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
|
|||||||
setType = set["setType"]
|
setType = set["setType"]
|
||||||
setCodeName = set["setKey"]
|
setCodeName = set["setKey"]
|
||||||
|
|
||||||
// console.log(prefix);
|
settingsArray = collectSetting(prefix, setCodeName, setType, settingsArray)
|
||||||
|
|
||||||
const setTypeObject = JSON.parse(processQuotes(setType))
|
// // console.log(prefix);
|
||||||
// console.log(setTypeObject);
|
|
||||||
|
|
||||||
const dataType = setTypeObject.dataType;
|
// const setTypeObject = JSON.parse(processQuotes(setType))
|
||||||
|
// // console.log(setTypeObject);
|
||||||
|
|
||||||
// get the element with the input value(s)
|
// const dataType = setTypeObject.dataType;
|
||||||
let elements = setTypeObject.elements.filter(element => element.elementHasInputValue === 1);
|
|
||||||
|
|
||||||
// if none found, take last
|
// // get the element with the input value(s)
|
||||||
if(elements.length == 0)
|
// let elements = setTypeObject.elements.filter(element => element.elementHasInputValue === 1);
|
||||||
{
|
|
||||||
elementWithInputValue = setTypeObject.elements[setTypeObject.elements.length - 1]
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
elementWithInputValue = elements[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
const { elementType, elementOptions = [], transformers = [] } = elementWithInputValue;
|
// // if none found, take last
|
||||||
const {
|
// if(elements.length == 0)
|
||||||
inputType,
|
// {
|
||||||
readOnly,
|
// elementWithInputValue = setTypeObject.elements[setTypeObject.elements.length - 1]
|
||||||
isMultiSelect,
|
// } else
|
||||||
isOrdeable,
|
// {
|
||||||
cssClasses,
|
// elementWithInputValue = elements[0]
|
||||||
placeholder,
|
// }
|
||||||
suffix,
|
|
||||||
sourceIds,
|
|
||||||
separator,
|
|
||||||
editable,
|
|
||||||
valRes,
|
|
||||||
getStringKey,
|
|
||||||
onClick,
|
|
||||||
onChange,
|
|
||||||
customParams,
|
|
||||||
customId,
|
|
||||||
columns,
|
|
||||||
base64Regex,
|
|
||||||
elementOptionsBase64
|
|
||||||
} = handleElementOptions('none', elementOptions, transformers, val = "");
|
|
||||||
|
|
||||||
let value;
|
// const { elementType, elementOptions = [], transformers = [] } = elementWithInputValue;
|
||||||
|
// const {
|
||||||
|
// inputType,
|
||||||
|
// readOnly,
|
||||||
|
// isMultiSelect,
|
||||||
|
// isOrdeable,
|
||||||
|
// cssClasses,
|
||||||
|
// placeholder,
|
||||||
|
// suffix,
|
||||||
|
// sourceIds,
|
||||||
|
// separator,
|
||||||
|
// editable,
|
||||||
|
// valRes,
|
||||||
|
// getStringKey,
|
||||||
|
// onClick,
|
||||||
|
// onChange,
|
||||||
|
// customParams,
|
||||||
|
// customId,
|
||||||
|
// columns,
|
||||||
|
// base64Regex,
|
||||||
|
// elementOptionsBase64
|
||||||
|
// } = handleElementOptions('none', elementOptions, transformers, val = "");
|
||||||
|
|
||||||
if (dataType === "string" && elementWithInputValue.elementType === "datatable" ) {
|
// let value;
|
||||||
|
|
||||||
value = collectTableData(`#${setCodeName}_table`)
|
// if (dataType === "string" && elementWithInputValue.elementType === "datatable" ) {
|
||||||
settingsArray.push([prefix, setCodeName, dataType, btoa(JSON.stringify(value))]);
|
|
||||||
|
|
||||||
} else if (dataType === "string" ||
|
// value = collectTableData(`#${setCodeName}_table`)
|
||||||
(dataType === "integer" && (inputType === "number" || inputType === "text"))) {
|
// settingsArray.push([prefix, setCodeName, dataType, btoa(JSON.stringify(value))]);
|
||||||
|
|
||||||
|
// } else if (dataType === "string" ||
|
||||||
|
// (dataType === "integer" && (inputType === "number" || inputType === "text"))) {
|
||||||
|
|
||||||
value = $('#' + setCodeName).val();
|
// value = $('#' + setCodeName).val();
|
||||||
value = applyTransformers(value, transformers);
|
// value = applyTransformers(value, transformers);
|
||||||
|
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
} else if (inputType === 'checkbox') {
|
// } else if (inputType === 'checkbox') {
|
||||||
|
|
||||||
value = $(`#${setCodeName}`).is(':checked') ? 1 : 0;
|
// value = $(`#${setCodeName}`).is(':checked') ? 1 : 0;
|
||||||
|
|
||||||
if(dataType === "boolean")
|
// if(dataType === "boolean")
|
||||||
{
|
// {
|
||||||
value = value == 1 ? "True" : "False";
|
// value = value == 1 ? "True" : "False";
|
||||||
}
|
// }
|
||||||
|
|
||||||
value = applyTransformers(value, transformers);
|
// value = applyTransformers(value, transformers);
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
} else if (dataType === "array" ) {
|
// } else if (dataType === "array" ) {
|
||||||
|
|
||||||
let temps = [];
|
// let temps = [];
|
||||||
|
|
||||||
if(isOrdeable)
|
// if(isOrdeable)
|
||||||
{
|
// {
|
||||||
temps = $(`#${setCodeName}`).val()
|
// temps = $(`#${setCodeName}`).val()
|
||||||
} else
|
// } else
|
||||||
{
|
// {
|
||||||
// make sure to collect all if set as "editable" or selected only otherwise
|
// // make sure to collect all if set as "editable" or selected only otherwise
|
||||||
$(`#${setCodeName}`).attr("my-editable") == "true" ? additionalSelector = "" : additionalSelector = ":selected";
|
// $(`#${setCodeName}`).attr("my-editable") == "true" ? additionalSelector = "" : additionalSelector = ":selected";
|
||||||
|
|
||||||
$(`#${setCodeName} option${additionalSelector}`).each(function() {
|
// $(`#${setCodeName} option${additionalSelector}`).each(function() {
|
||||||
const vl = $(this).val();
|
// const vl = $(this).val();
|
||||||
if (vl !== '') {
|
// if (vl !== '') {
|
||||||
temps.push(applyTransformers(vl, transformers));
|
// temps.push(applyTransformers(vl, transformers));
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
value = JSON.stringify(temps);
|
// value = JSON.stringify(temps);
|
||||||
|
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
|
|
||||||
} else if (dataType === "none") {
|
// } else if (dataType === "none") {
|
||||||
// no value to save
|
// // no value to save
|
||||||
value = ""
|
// value = ""
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
} else if (dataType === "json") {
|
// } else if (dataType === "json") {
|
||||||
|
|
||||||
value = $('#' + setCodeName).val();
|
// value = $('#' + setCodeName).val();
|
||||||
value = applyTransformers(value, transformers);
|
// value = applyTransformers(value, transformers);
|
||||||
value = JSON.stringify(value, null, 2)
|
// value = JSON.stringify(value, null, 2)
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
|
|
||||||
} else {
|
// } else {
|
||||||
|
|
||||||
console.error(`[saveSettings] Couldn't determine how to handle (setCodeName|dataType|inputType):(${setCodeName}|${dataType}|${inputType})`);
|
// console.error(`[saveSettings] Couldn't determine how to handle (setCodeName|dataType|inputType):(${setCodeName}|${dataType}|${inputType})`);
|
||||||
|
|
||||||
value = $('#' + setCodeName).val();
|
// value = $('#' + setCodeName).val();
|
||||||
value = applyTransformers(value, transformers);
|
// value = applyTransformers(value, transformers);
|
||||||
console.error(`[saveSettings] Saving value "${value}"`);
|
// console.error(`[saveSettings] Saving value "${value}"`);
|
||||||
settingsArray.push([prefix, setCodeName, dataType, value]);
|
// settingsArray.push([prefix, setCodeName, dataType, value]);
|
||||||
}
|
// }
|
||||||
});
|
});
|
||||||
|
|
||||||
// sanity check to make sure settings were loaded & collected correctly
|
// sanity check to make sure settings were loaded & collected correctly
|
||||||
|
|||||||
Reference in New Issue
Block a user