210 lines
9.1 KiB
JavaScript
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.
|
|
}
|
|
}
|