Files
Facilitor/APPL/Shared/default.inc
Jos Groot Lipman dc490bb8fe Release 2019.2 Gold E
svn path=/Website/branches/v2019.2/; revision=45921
2020-02-20 14:07:45 +00:00

274 lines
12 KiB
PHP

<% /*
$Revision$
$Id$
File: default.inc
Description: Gaat over alle settings
Parameters:
Context: Vanuit ELK asp bestand
*/
var FCLTVersion="2019.2e";
var FCLTMinDatabaseSchema="37";
var custpath = rooturl + "/cust/" + customerId; // path to customer files
var hiresTimer = null;
/* global */
settings =
{
overrule: {},
cache : { perfmon_threshold: { v: 2000 }, // is al nodig om de settings uit de database te kunnen halen
// Onderstaande settings hebben een default die custpath afhankelijk is.
// In de database kunnen ze nog wel overruled worden
flexfilespath: { v: Server.MapPath(custpath + "/flexfiles") },
bdradrfiles_path: { v: Server.MapPath(custpath + "/bdradrfiles") },
// fg_dwf_path: { v: Server.MapPath(custpath) },
// Merk op dat onderstaande paden (ook) via http benaderd worden. Daarom in
// eerste instantie nog geen Server.MapPath
// Sommige staan nog onder /flexfiles/ voor backwards compatibiliteit hoewel
// logischer is om ze ooit allemaal onder een /photos/ te plaatsen
image_path_virtual: { v: custpath },
menu_image_path: { v: custpath + "/flexfiles/menu/" },
prs_image_path: { v: custpath + "/flexfiles/prs/" },
res_image_path: { v: custpath + "/photos/" },
bes_image_path: { v: custpath + "/photos/BES/" },
ins_image_path: { v: custpath + "/photos/INS/" },
mrk_image_path: { v: custpath + "/flexfiles/MRK/" },
mlds_image_path: { v: custpath + "/flexfiles/MLD/IMAGES/STDM/" }
},
// Laad alle settings uit de database
loadSET : function(force)
{
if ( !force && typeof Application("SET_TM_" + customerId) != "undefined")
{
if (typeof CACHE_checkfreshness == "undefined")
return; // we hebben ze al gecached en we gaan geen freshness controleren
// Ok, freshness controleren
var sql = "SELECT MAX(fac_setting_datum) max_date"
+ " FROM fac_setting";
var oRs = Oracle.Execute(sql);
var max_date = new Date(oRs("max_date").Value);
oRs.Close();
var lastCache = new Date(Application("SET_TM_" + customerId));
if (max_date <= lastCache)
{ // Dan misschien alleen default.csx compileren
FCLTHeader.testTemplateCssRefresh();
return; // Cache is verder vers genoeg
}
__DoLog("Forced settings cache reload. Cache was loaded " + toISODateTimeString(lastCache, true) + ", last setting is " + toISODateTimeString(max_date, true), "#ffff00");
}
Application.Lock();
if (typeof Application("SET_INSTANCE_TIME") == "undefined")
{
var tm_start = new Date();
Application("SET_INSTANCE_TIME") = tm_start.getTime(); // Estimated application pool start
Application("SET_INSTANCE_RANDOM") = shared.random(32);
if (tm_start.getHours() >= 9 && tm_start.getHours() <= 17) // Tijdens kantooruren registreren we in de AiAi logger
{
var keeplog = __LogfileName;
var folder = Server.MapPath(rooturl + "/temp/_AiAi_error");
var fso = Server.CreateObject("Scripting.FileSystemObject");
if (!fso.FolderExists(folder))
fso.CreateFolder(folder);
var nowtxt = toISODateString(new Date());
/* global */ __LogfileName = folder + "/log_" + nowtxt + ".html";
try
{
var WshShell = new ActiveXObject("WScript.Shell");
var pool_id = WshShell.ExpandEnvironmentStrings("%APP_POOL_ID%");
}
catch (e)
{
pool_id = "<unknown>";
}
if (!pool_id.match(/API/)) // API application pools kunnen regulier herstarten
{
__DoLog("Unexpected Application pool '{0}' (re)start at {1} during office hours".format(pool_id, toISODateTimeString(tm_start, true)), "#f00");
__DoLog("CustomerId: {0}".format(customerId));
__DoLog("Triggered by {0}://{1}".format(String(Request.ServerVariables("SERVER_PORT")) == '443'?"https":"http",
String(Request.ServerVariables("HTTP_HOST"))));
}
__LogfileName = keeplog;
}
}
var sql = "SELECT fac_setting_name,"
+ " fac_setting_type,"
+ " coalesce(fac_setting_pvalue, fac_setting_default) fac_setting_value"
+ " FROM fac_setting";
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 in this.cache) // Default waarde is al in ASP gezet
{
v = this.cache[n].v;
t = typeof v;
}
// Normaal gesproken zijn dit absolute paden maar we staan ook relatieve
// paden ten opzichte van de root toe
if (n == "flexfilespath")
{
if (v.substr(0,1) == '*') // *_DATA wordt branch20163_DATA of FPlace5i_DATA
{
v = Server.MapPath(rooturl || "/") + v.substr(1) + "/" + customerId;
var fso = Server.CreateObject("Scripting.FileSystemObject");
v = fso.GetAbsolutePathName(v); // Technisch niet nodig maar toch '..' wegwerken
__Log("Path {0} is set to {1}".format(n, v));
}
}
Application("SET_T_" + n) = t; // Is voor alle klanten gelijk
Application("SET_" + customerId + "_" + n) = v;
//Response.Write(oRs("fac_setting_name").Value + ": " + typeof v);
oRs.MoveNext();
}
oRs.Close();
// Eigenlijk moet DBLANG ook gewoon een setting worden. Simuleer dat hier
var oRs = Oracle.Execute("SELECT fac_version_lang, fac_version_schema FROM fac_version");
Application("SET_T_DB_LANG") = "string"; // Is voor alle klanten gelijk
Application("SET_" + customerId + "_DB_LANG") = oRs("fac_version_lang").Value;
Application("SET_T_DB_SCHEMA") = "string"; // Is voor alle klanten gelijk
Application("SET_" + customerId + "_DB_SCHEMA") = oRs("fac_version_schema").Value;
oRs.Close();
Application("SET_" + customerId) = toISODateTimeString(new Date());
Application("SET_TM_" + customerId) = new Date().getTime();
var sql = "SELECT MAX(adm_tracking_date)"
+ " FROM adm_tracking"
+ " WHERE adm_tracking_revision IS NOT NULL";
var oRs = Oracle.Execute(sql);
Application(customerId + "_ADMTRACK") = new Date(oRs(0).Value).getTime();
oRs.Close();
// Op deze plek van de code komen we doorgaans eens per dag
// Mooie plek voor wat onderhoud
FCLTHeader.generateTemplateCss(); // load when settings are loaded (once per day)
// Pseudo overschrijding om aantal gebruikers gisteren te registreren
var sql = "BEGIN fac.fac_perfmon_incr("+S("perfmon_threshold")+", 0); END;"
Oracle.Execute(sql);
// Rotate logfile
//rotateLogfile(S("max_logfile_size"));
rotateLogfile(4194304); // custenv.wsc/DEFAULT is nog niet geladen. Daarom even hardcoded
// set "portalert" with S("fac_portalert_XD") if available
if (S("fac_portalert_xd") != "")
{
Application("portalalert") = S("fac_portalert_xd");
}
Application.UnLock();
},
// Get setting value
// finalTry -->geef fatal error bij problemen
// (zonder finalTry proberen we eerst de cache te verversen)
finalTry: false, // semi-globale ipv. parameter om nasty-recursion te voorkomen
get_setting : function (s, defval, nooverrule)
{
if (!nooverrule && s.toLowerCase() in settings.overrule)
return settings.overrule[s.toLowerCase()];
var v = Application("SET_" + customerId + "_" + s);
if (typeof v == "undefined")
var v = Application("SET_DEFAULT_" + s); // Overrule.DEFAULT uit custenv.wsc
try
{
if (typeof v == "undefined")
{
if (s in this.cache)
return this.cache[s].v; // Alleen voor perfmon_threshold nodig ...
else
throw { description: "Setting is missing. Perhaps it is time to upgrade the database." };
}
var t = Application("SET_T_" + s);
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.
__DoLog("eval van options mislukt: " + e.description, "#FF0000")
__DoLog(v);
v = "";
}
break;
}
//__Log("Setting " + s + " is type " + t + " en v=" + v + " ("+(typeof v)+")");
return v;
}
catch(e)
{
if (settings.finalTry)
{
if (typeof defval != "undefined")
return defval;
__DoLog("Could not retrieve setting " + s + "\n" + e.description, "FF0000");
var txt = "Could not retrieve setting <strong>" + s + "</strong><br>" + e.description;
var sql = "SELECT MAX(adm_tracking_date)"
+ " FROM adm_tracking"
+ " WHERE adm_tracking_name = 'FAC_SET.SRC'";
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
__DoLog("FAC_SET.SRC was last loaded " + toISODateTimeString(oRs(0).Value));
}
oRs.Close()
eval("INTERNAL_ERROR_MISSING_SETTING_"+s);
}
else
{ // Kan gebeuren vlak na een upgrade als mensen binnenkomen via SSO of via een API
// CACHE_checkfreshness is alleen gezet op de voorpagina maar daar komen die twee niet per se langs
// Met name in de API wil ik CACHE_checkfreshness niet aanzetten: te duur. Daarom robuust bouwen
settings.finalTry = true;
settings.loadSET(true);
return settings.get_setting(s, defval); // laatste poging
}
}
},
// Set setting value (res_t1 gebruikt dat bijvoorbeeld)
// Alleen zeer tijdelijk effect voor rest van het bestand
overrule_setting : function (s, v)
{
settings.overrule[s.toLowerCase()] = v;
}
}
// Shorthand
function S(s, defval)
{
return settings.get_setting(s, defval)
}
%>