Files
Facilitor/UTILS/utils_settings.js
Jos Groot Lipman 9583267077 WEND#88515 Hangende notificatie wordt telkens weer geprobeerd
svn path=/Website/branches/v2025.1/; revision=68687
2025-04-08 11:48:32 +00:00

210 lines
9.1 KiB
JavaScript

/*
$Id$
File: utils_settings.js
Description: Reguliere ASP-code heeft via default.inc toegang tot een functie S("....") om settings uit te lezen
Sommige UTILS functies worden zowel vanuit ASP (via wsc) als los 'scheduled' (via wsf) gebruikt.
In die laatste context is er geen toegang tot default.asp maar is het toch wel erg handig om
S() te hebben. Daarom wordt die hier gedefinieerd voor wsf bestanden
Context: Gebruik: neem in de wsf(!) file op:
<script language="JScript" src="../utils_settings.js"/>
en doe in de wsf een var custabspath = fso.GetAbsolutePathName("../");
Note: Alleen settings waarvan de naam begint met 'puo_' worden ondersteund
(en als extra: flexfilespath)
*/
var settings = { // defaults voordat parameters gelezen zijn; fouten gaan nog alleen naar file (want geen db bekend)
puo_loglevel: { v: 1, t: "string" },
puo_logdestination: { v: 1, t: "string" },
overrule: {},
loaded: false,
loadSet : function()
{ // Laad alle settings voor put_orders uit de database
var fso = new ActiveXObject("Scripting.FileSystemObject");
try
{
var sql = "SELECT fac_setting_name"
+ " , fac_setting_type"
+ " , COALESCE(fac_setting_pvalue, fac_setting_default) fac_setting_value"
+ " FROM fac_setting"
+ " WHERE fac_setting_module = 'PUO'"
+ " OR fac_setting_name = 'flexfilespath'";
var oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{
var n = oRs("fac_setting_name").Value;
var t = oRs("fac_setting_type").Value;
var v = oRs("fac_setting_value").Value;
if (!v || (n == "flexfilespath" && v == "@"))
{
switch (n)
{
case "flexfilespath":
v = fso.GetAbsolutePathName(custabspath + "/flexfiles");
break;
case "bdradrfiles_path":
v = fso.GetAbsolutePathName(custabspath + "/bdradrfiles");
break;
}
}
else
{
if (n == "flexfilespath" && v.substr(0,1) == '*') // *_DATA wordt branch20163_DATA of FPlace5i_DATA
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
v = fso.GetAbsolutePathName(custabspath + "../../..")
+ v.substr(1) + "/" + customerId;
__Log("Path {0} is set to {1}".format(n, v));
}
}
this[n]= {v: v, t: t};
oRs.MoveNext();
}
oRs.Close();
//__Log(this["flexfilespath"].v);
__Log("Settings loaded from database.");
}
catch(err)
{
__Log("Error loading settings from database: " + err.description);
}
// Optionele overrules in cust/custenv.wsc en cust/XXXX/custenv.inc
tryOverrules();
},
get_setting : function (s)
{
if (!this.loaded)
{
this.loadSet();
this.loaded = true;
}
if (s.toLowerCase() in settings.overrule)
return settings.overrule[s.toLowerCase()];
try
{
if (!(s in this))
{
throw { description: "Setting is missing. Perhaps it is time to upgrade the database." };
}
var v = this[s].v;
var t = this[s].t;
switch (t)
{
case "string":
v = v || "";
break;
case "number":
v = parseInt(v);
break;
case "float":
v = parseFloat(v);
break;
case "boolean":
v = (v == "true") || (v == "1") || (v.toLowerCase() == "yes");
break;
case "array":
v = v? v.split(",") : [];
break;
case "json":
try
{
v = eval("(" + v + ")");
}
catch(e)
{ // Zou niet mogen gebeuren maar vanwege zeer hoge impact (gebruiker
// kan echt niets meer) toch maar onderscheppen.
__Log("eval van options mislukt: " + e.description);
v = "";
}
break;
}
return v;
}
catch(e)
{
__Log("Bad or missing value '" + v + "' for setting '" + s + "'\n" + e.description);
WScript.Quit();
}
},
overrule_setting: function (s, v)
{
if (settings[s.toLowerCase()])
{
__Log(" Overruling " + (s + " ").substr(0, 22) + " to: " + v);
settings.overrule[s.toLowerCase()] = v;
}
}
}
function S(s, defval)
{
return settings.get_setting(s, defval)
}
function tryOverrules(domain, username)
{
settings.overrule = {};
tryOverrule("../../custenv.wsc", domain, username);
tryOverrule("../custenv.wsc", domain, username); // deze is sterker
tryOverrule("./custenv.wsc", domain, username); // deze is het sterkst sterker
}
// ASP-code heeft zijn eigen variant, deze is voor Putorders.bat/wsf
function tryOverrule(path, domain, username)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var hookfile = fso.GetAbsolutePathName(path);
if (fso.FileExists(hookfile))
{
var hook = GetObject("script:"+hookfile);
// Deze mag de hookfile gebruiken
hook.Overrule =
{
SET: function (naam, waarde)
{
settings.overrule_setting(naam.toLowerCase(), waarde);
},
DEFAULT: function (naam, type, waarde)
{
if (naam in settings)
{
__Log(" Default " + (naam + " ").substr(0, 22) + " has already value " + settings[naam].v);
}
else
{
settings[naam]= {v: waarde, t: type};
__Log(" Defaulting " + (naam + " ").substr(0, 22) + " to: " + waarde);
}
return;
},
LCL: function (naam, waarde)
{
return; // doen we nog niets mee hier
//overrule_lcl[naam] = waarde;
},
APPLICATION: function (naam, waarde)
{
return; // doen we niets mee hier
}
}
var WshNetwork = new ActiveXObject("WScript.Network");
var puo_data = { customerId: customerId,
custabspath: custabspath,
Computername: WshNetwork.ComputerName,
Username: username || WshNetwork.UserName,
Userdomain: domain || WshNetwork.UserDomain
};
__Log("Using overrule " + hookfile + " with user " + WshNetwork.UserName);
hook.custenv(null, puo_data);
hook = null; // zorg dat de GC het object kan opruimen.
}
}