1863 lines
82 KiB
C++
1863 lines
82 KiB
C++
<% /*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: FlexFiles.inc
|
||
Description:
|
||
Parameters:
|
||
Context:
|
||
Note: pModule, pKey en pSubpath worden genormaliseerd
|
||
tot simpele/veilige padnamen
|
||
*/
|
||
|
||
var fso = Server.CreateObject("Scripting.FileSystemObject"); // Die hebben we hier *zo* vaak nodig.
|
||
|
||
function trackBijlagen(pModule, pKey, params, result, action)
|
||
{
|
||
if (pKey > -1 && params.trackcode && (params.kenmerktype == "E" || params.kenmerktype == "F" || params.kenmerktype == "M"))
|
||
{
|
||
if (pModule == "BEZ") { // Voor afpraken heb ik de afspraak key nodig i.p.v. de bezoekerskey om de kenmerk omschrijving te bepalen.
|
||
var sql = "SELECT bez_afspraak_key" +
|
||
" FROM bez_bezoekers" +
|
||
" WHERE bez_bezoekers_key = " + pKey;
|
||
var oRs = Oracle.Execute(sql);
|
||
var afspr_key = oRs("bez_afspraak_key").Value;
|
||
oRs.close();
|
||
pKey = String(afspr_key);
|
||
}
|
||
|
||
var ptxt;
|
||
var j;
|
||
if (action == "upload")
|
||
{
|
||
for (j = 0; j < result.safefilename.length; j++)
|
||
{
|
||
if (params.kenmerksysteem & 4)
|
||
ptxt = L("lcl_shared_attachment_add").format(params.kenmerkoms, L("lcl_confidential_mask"));
|
||
else
|
||
ptxt = L("lcl_shared_attachment_add").format(params.kenmerkoms, result.safefilename[j]);
|
||
shared.trackaction(params.trackcode, pKey, ptxt);
|
||
}
|
||
}
|
||
else if (action == "delete")
|
||
{
|
||
if (params.kenmerksysteem & 4)
|
||
ptxt = L("lcl_shared_attachment_delete").format(params.kenmerkoms, L("lcl_confidential_mask"));
|
||
else
|
||
ptxt = L("lcl_shared_attachment_delete").format(params.kenmerkoms, safe.filename(pDoDelete));
|
||
shared.trackaction(params.trackcode, pKey, ptxt);
|
||
}
|
||
|
||
if (pModule == "MLD" && params.niveau == "M" && action=="upload")
|
||
{
|
||
var mld_key = pKey;
|
||
var mfe = mld.func_enabled_melding (mld_key);
|
||
if (mfe.haveOnlyFErights)
|
||
{
|
||
var mld_info = mld.mld_melding_info(mld_key);
|
||
// Bij het toevoegen van een bijlage (alleen door de FrontEnd) bij notities onder water de flags/status/notitificatie doen
|
||
// alsof er een notitie was getikt door die Frontend.
|
||
var result = mld_note_save(mld_key,
|
||
ptxt, // Text van de notitie.
|
||
{ note_key: -1, // Als een nieuwe notitie.
|
||
note_parent_key: -1,
|
||
has_zichtbaarFE: false,
|
||
zichtFE: true,
|
||
notifyFE: false,
|
||
notifyFEchild: false,
|
||
notifyExt: false,
|
||
action2FE: false,
|
||
has_action2BO: mld_info.actiecode != 1,
|
||
action2BO: mld_info.actiecode != 1, // Als FE + actie niet bij BO, dan actie naar BO. Idem als bij notities.
|
||
has_notifyBO: false,
|
||
notifyBO: false,
|
||
fac_note_group_key: null,
|
||
ismailnote: 0,
|
||
bijlage: true // Het betreft een bijlage i.p.v. een notitie. Dan alleen de flags/status/notitificatie doen.
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function bepaalNiveau(pModule, pNiveau)
|
||
{
|
||
if (pModule == "MLD")
|
||
{
|
||
if ("MO".indexOf(pNiveau) >=0)
|
||
return pNiveau;
|
||
else
|
||
INTERNAL_ERROR_PNIVEAU;
|
||
}
|
||
if (pModule == "PRS")
|
||
{
|
||
if ("ABCP".indexOf(pNiveau) >=0)
|
||
return pNiveau;
|
||
else
|
||
INTERNAL_ERROR_PNIVEAU;
|
||
}
|
||
|
||
// return pModule.substr(0,1) zou waarschijnlijk ook voldoen
|
||
switch (pModule)
|
||
{
|
||
case "ALG": pNiveau = "A";
|
||
break;
|
||
case "BES":
|
||
case "BEZ": pNiveau = "B";
|
||
break;
|
||
case "CNT": pNiveau = "C";
|
||
break;
|
||
case "FIN": pNiveau = "F";
|
||
break;
|
||
case "INS": pNiveau = (pNiveau ? pNiveau : "I"); // S voor sleutel (en toekomst: C voor controle/inspectie)
|
||
break;
|
||
case "MRK": pNiveau = "M";
|
||
break;
|
||
case "RES": pNiveau = "R";
|
||
break;
|
||
case "FAQ": pNiveau = "F";
|
||
break;
|
||
}
|
||
return pNiveau;
|
||
}
|
||
|
||
function kenmerkwaardetabel_info(pModule, pNiveau)
|
||
{
|
||
// zie ook FAC_PACFLEX.src
|
||
var kmw = {module: pModule};
|
||
switch (pModule)
|
||
{
|
||
case "ALG": kmw.tabel = "alg_onrgoedkenmerk";
|
||
kmw.refkey = "alg_onrgoed_key";
|
||
break;
|
||
case "BES": if (pNiveau == "I")
|
||
{ kmw.module = "BES";
|
||
kmw.tabel = "bes_kenmerkbesteli";
|
||
kmw.refkey = "bes_bestelling_item_key";
|
||
}
|
||
if (pNiveau == "B")
|
||
{ kmw.module = "BES";
|
||
kmw.tabel = "bes_kenmerkbestell";
|
||
kmw.ref_key = "bes_bestelling_key";
|
||
}
|
||
break;
|
||
case "BEZ": kmw.tabel = "bez_kenmerkwaarde";
|
||
kmw.refkey = "bez_bezoekers_key";
|
||
break;
|
||
case "CNT": kmw.tabel = "cnt_kenmerkcontract";
|
||
kmw.refkey = "cnt_contract_key";
|
||
break;
|
||
case "FAQ": kmw.tabel = "faq_kenmerkwaarde";
|
||
kmw.refkey = "fac_faq_key";
|
||
break;
|
||
case "FIN": if (pNiveau == "R")
|
||
{ kmw.module = "FIN";
|
||
kmw.tabel = "fin_kenmerkfactregel";
|
||
kmw.refkey = "fin_factuurregel_key";
|
||
}
|
||
if (pNiveau == "F")
|
||
{ kmw.module = "FIN";
|
||
kmw.tabel = "fin_kenmerkfactuur";
|
||
kmw.refkey = "fin_factuur_key";
|
||
}
|
||
break;
|
||
case "INS": kmw.tabel = "ins_kenmerkdeel";
|
||
kmw.refkey = "ins_deel_key";
|
||
break;
|
||
case "MLD": if (pNiveau == "M")
|
||
{ kmw.module = "MLD";
|
||
kmw.tabel = "mld_kenmerkmelding";
|
||
kmw.refkey = "mld_melding_key";
|
||
}
|
||
if (pNiveau == "O")
|
||
{ kmw.module = "OPD";
|
||
kmw.tabel = "mld_kenmerkopdr";
|
||
kmw.refkey = "mld_opdr_key";
|
||
}
|
||
break;
|
||
case "PRS": kmw.tabel = "prs_kenmerklink";
|
||
kmw.refkey = "prs_link_key";
|
||
break;
|
||
case "RES": kmw.module = "RES";
|
||
kmw.tabel = "res_kenmerkwaarde";
|
||
kmw.refkey = "res_rsv_ruimte_key";
|
||
//kmw.tabel = "res_kenmerkartikel";
|
||
//kmw.refkey = "res_rsv_artikel_key";
|
||
break;
|
||
}
|
||
|
||
kmw.kenmerkkey = pModule + "_kenmerk_key";
|
||
kmw.waarde = kmw.tabel + "_waarde";
|
||
kmw.verwijder = kmw.tabel + "_verwijder";
|
||
|
||
// Uitzondering:
|
||
if (pModule == "RES")
|
||
kmw.waarde = "res_kenmerkreservering_waarde";
|
||
return kmw;
|
||
}
|
||
|
||
var cache_bepaalKenmerkGegevens = []; // vanuit API2 mogelijk voor heel veel records aangeroepen
|
||
function bepaalKenmerkGegevens(pModule, pKenmerkkey)
|
||
{
|
||
if (pKenmerkkey == null)
|
||
return {kenmerk_omschrijving: null, kenmerk_type: null};
|
||
|
||
var cache_code = pModule + "_" + pKenmerkkey;
|
||
if (cache_code in cache_bepaalKenmerkGegevens)
|
||
return cache_bepaalKenmerkGegevens[cache_code];
|
||
|
||
var table;
|
||
var srttable;
|
||
switch (pModule)
|
||
{
|
||
case "ALG": table = "alg_kenmerk";
|
||
break;
|
||
case "BES": table = "bes_kenmerk";
|
||
srttable = "bes_srtkenmerk";
|
||
break;
|
||
case "BEZ": table = "bez_kenmerk";
|
||
break;
|
||
case "CNT": table = "cnt_kenmerk";
|
||
srttable = "cnt_srtkenmerk";
|
||
break;
|
||
case "FIN": table = "fin_kenmerk";
|
||
break;
|
||
case "INS": table = "ins_kenmerk";
|
||
srttable = "ins_srtkenmerk";
|
||
break;
|
||
case "MLD": table = "mld_kenmerk";
|
||
srttable = "mld_srtkenmerk";
|
||
break;
|
||
case "PRS": table = "prs_kenmerk";
|
||
break;
|
||
case "RES": table = "res_kenmerk";
|
||
srttable = "res_srtkenmerk";
|
||
break;
|
||
case "FAQ": table = "faq_kenmerk";
|
||
break;
|
||
}
|
||
|
||
cache_bepaalKenmerkGegevens[cache_code] = {};
|
||
var sql = "SELECT " + lcl.xsql((srttable? "sk." + srttable : "k." + table) + "_omschrijving", (srttable? "sk." + srttable : "k." + table) + "_key") + " kenmerk_omschrijving"
|
||
+ " , " + (srttable? srttable : table) + "_kenmerktype kenmerk_type"
|
||
+ " , " + (srttable? srttable : table) + "_systeem kenmerk_systeem"
|
||
+ " , " + table + "_regexp kenmerk_regexp"
|
||
+ " FROM " + table + " k"
|
||
+ (srttable
|
||
? " , " + srttable + " sk"
|
||
: "")
|
||
+ " WHERE k." + table + "_key = " + pKenmerkkey
|
||
+ (srttable
|
||
? " AND k." + srttable + "_key = sk." + srttable + "_key"
|
||
: "")
|
||
var oRs = Oracle.Execute(sql);
|
||
if (!oRs.eof)
|
||
{
|
||
var kenmerk_omschrijving = oRs("kenmerk_omschrijving").Value;
|
||
var kenmerk_type = oRs("kenmerk_type").Value;
|
||
var kenmerk_systeem = oRs("kenmerk_systeem").Value;
|
||
var kenmerk_regexp = oRs("kenmerk_regexp").Value;
|
||
cache_bepaalKenmerkGegevens[cache_code] = {kenmerk_omschrijving: kenmerk_omschrijving, kenmerk_type: kenmerk_type, kenmerk_systeem: kenmerk_systeem, kenmerk_regexp: kenmerk_regexp}
|
||
}
|
||
oRs.close();
|
||
|
||
return cache_bepaalKenmerkGegevens[cache_code];
|
||
}
|
||
|
||
function subfolderNew(pNiveau, pId)
|
||
{
|
||
return pNiveau + "__NEW__" + pId;
|
||
}
|
||
|
||
function subfolderKey(pNiveau, pKey)
|
||
{
|
||
var keyStr = "0000000" + pKey;
|
||
var subfolder = pNiveau + keyStr.substr(keyStr.length-7,4) + "___/" + pNiveau + pKey;
|
||
return subfolder;
|
||
}
|
||
|
||
// Codering: M=MLD:K=12345:S=587:N=M:R=R400x400,F=AMSG0-01-A047.JPG
|
||
function flexProps2(flexcode)
|
||
{
|
||
var Module, Key, Subpath, Niveau, getparams;
|
||
var getparams = { getFiles: true };
|
||
|
||
var codes = flexcode.split(":");
|
||
for (var i = 0; i < codes.length; i++)
|
||
{
|
||
var code = codes[i].substr(0,1);
|
||
var data = codes[i].substr(2);
|
||
switch (codes[i].substr(0,1))
|
||
{
|
||
case "M": Module = data;
|
||
break;
|
||
case "K": Key = data; // Ik zou hier willen testen met parseInt maar bijvoorbeeld bij graphics is de Key een dwf-bestandsnaam
|
||
if (!Key)
|
||
shared.internal_error("Bad key in '{0}'".format(Server.HTMLEncode(flexcode)));
|
||
break;
|
||
case "S": Subpath = data; // Doorgaans kenmerk key
|
||
break;
|
||
case "N": Niveau = data;
|
||
break;
|
||
case "F": getparams.getFile = data;
|
||
break;
|
||
case "R": getparams.resizeCode = data;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var params = flexProps(Module, Key, Subpath, Niveau, getparams);
|
||
return params;
|
||
}
|
||
function flexProps(pModule, pKey, pSubpath, pNiveau, params)
|
||
{
|
||
params = params || {};
|
||
var result = { directlink: false,
|
||
files: [],
|
||
autfunctionapiread: 'WEB_PRSSYS', // default streng, logfiles zetten we later zelfs op FACTAB
|
||
autfunctionapiwrite: 'WEB_PRSSYS',
|
||
autfunctionapibrowse: 'WEB_PRSSYS'
|
||
};
|
||
var pKenmerk_key = (isNaN(parseInt(pSubpath)) ? -1 : parseInt(pSubpath));
|
||
switch (pModule)
|
||
{
|
||
case "FGII": // Facilitor Graphics
|
||
result.AttachRootPath = S("flexfilespath") + "/cad/concept/";
|
||
result.AttachPath = result.AttachRootPath;
|
||
result.searchfile = true;
|
||
result.extFilter = "dwf";
|
||
result.linkImmediate = {
|
||
"table" : "cad_tekening",
|
||
"key_col" : "cad_tekening_key",
|
||
"link_col" : "cad_tekening_filenaam"
|
||
}
|
||
if (typeof pKey === "string") {
|
||
params.filter = "^" + safe.regexp(pKey) + ".dwf$";
|
||
}
|
||
break;
|
||
case "FGIIV": // Vluchtplannen
|
||
result.AttachRootPath = S("flexfilespath") + "/cad/vlucht/";
|
||
result.AttachPath = result.AttachRootPath + "V" + pKey + "/";
|
||
result.pickfile = true;
|
||
result.multi = true;
|
||
result.extFilter = "dwf";
|
||
break;
|
||
case "FGIIS": // Facilitor Graphics symbolen
|
||
result.AttachRootPath = S("flexfilespath") + "/cad/symbols/";
|
||
result.AttachPath = result.AttachRootPath;
|
||
result.extFilter = "dwf";
|
||
result.linkImmediate = {
|
||
"table" : "ins_srtdeel",
|
||
"key_col" : "ins_srtdeel_key",
|
||
"link_col" : "ins_srtdeel_acadsymbol"
|
||
}
|
||
if (typeof pKey === "string") {
|
||
params.filter = "^" + safe.regexp(pKey) + ".dwf$";
|
||
}
|
||
break;
|
||
case "FGIIP":
|
||
result.AttachRootPath = S("flexfilespath") + "/cad/prj/";
|
||
result.AttachPath = result.AttachRootPath + pKey + "/";
|
||
result.multi = true;
|
||
result.extFilter = "dwf";
|
||
break;
|
||
case "FGIIA": // Facilitor Graphics Actueel (alleen download)
|
||
result.AttachRootPath = S("flexfilespath") + "/cad/";
|
||
result.AttachPath = result.AttachRootPath;
|
||
result.searchfile = true;
|
||
result.multi = true;
|
||
result.extFilter = "dwf";
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "BESPH":
|
||
// Bestanden zijn te vinden op prs_bedrijf.prs_bedrijf_image_loc of ...cust/xxxx/photos/bes/[disc_key]/
|
||
// Wij kunnen alleen bestanden naar ...cust/xxxx/photos/bes/[disc_key]/ uploaden.
|
||
result.AttachRootPath = Server.MapPath(S("bes_image_path"));
|
||
result.RelativePath = S("bes_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/" + pKey + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.pickfile = true;
|
||
result.multi = true;
|
||
result.regexp = S("bes_photo_size");
|
||
result.directlink = true;
|
||
break;
|
||
case "INSPHS": // ins_srtdeel (Objectsoort)
|
||
// Bestanden zijn te vinden op ...cust/x/photos/ins
|
||
result.AttachRootPath = Server.MapPath(S("ins_image_path"));
|
||
result.RelativePath = S("ins_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("ins_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "ins_srtdeel";
|
||
if (typeof pKey === "string") {
|
||
params.filter = "^" + safe.regexp(pKey) + "$";
|
||
}
|
||
break;
|
||
case "BESD": // bes_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("besd_image_path"));
|
||
result.RelativePath = S("besd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("bes_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "BGTD": // bgt_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("bgtd_image_path"));
|
||
result.RelativePath = S("bgtd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("bgt_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "INSD": // ins_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("insd_image_path"));
|
||
result.RelativePath = S("insd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("ins_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "CNTD": // cnt_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("cntd_image_path"));
|
||
result.RelativePath = S("cntd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("cnt_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "RESD": // ins_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("resd_image_path"));
|
||
result.RelativePath = S("resd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("res_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "MLDS": // Stdmelding symbolen
|
||
result.AttachRootPath = Server.MapPath(S("mlds_image_path"));
|
||
result.RelativePath = S("mlds_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("mld_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "mld_stdmelding";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "MLDD": // mld_discipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("mldd_image_path"));
|
||
result.RelativePath = S("mldd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("mld_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "discipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "MLDSD": // mld_srtdiscipline symbolen
|
||
result.AttachRootPath = Server.MapPath(S("mldsd_image_path"));
|
||
result.RelativePath = S("mldsd_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("mld_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "ins_srtdiscipline";
|
||
if (typeof pKey === "string") {
|
||
params.filter = safe.regexp(pKey);
|
||
}
|
||
break;
|
||
case "ALG":
|
||
case "BES":
|
||
case "BEZ":
|
||
case "CNT":
|
||
case "FIN":
|
||
case "INS":
|
||
case "MLD":
|
||
case "PRS":
|
||
case "RES":
|
||
case "FAQ":
|
||
// Bestanden zijn nu te vinden on ...cust/x/flexfiles/[module]/[subfolder]/[key]/[kenmerk_key]
|
||
result.fac_bijlagen = true; // registreren in fac_bijlagen
|
||
result.AttachRootPath = (pKey > 0? S("flexFilesPath") : shared.tempFolder());
|
||
result.AttachSubPath = pModule + "/";
|
||
result.AttachSubPath += (pKey > 0? subfolderKey(bepaalNiveau(pModule, pNiveau), pKey)
|
||
: subfolderNew(bepaalNiveau(pModule, pNiveau), user_key + "_" + (params.tmpfolder||getQParam("tmpfolder",""))));
|
||
result.AttachSubPath += "/" + pSubpath;
|
||
result.AttachPath = result.AttachRootPath + "/" + result.AttachSubPath + "/";
|
||
|
||
// de volgende twee wil ik liever met de kenmerk-key opzoeken in de database
|
||
// maar dat is even te veel werk hier. De url is toch hmac-protected
|
||
result.extFilter = getQParam("extFilter", S("flexExtensionFilter"));
|
||
result.encrypt = getQParamInt("encrypt", 0) == 1;
|
||
result.regexp = getQParam("pregexp", ""); //P800x600 cropt/resized naar 800x600
|
||
if (pModule == "ALG" && params)
|
||
{
|
||
result.trackcode = pModule + params.alglevel + "UP";
|
||
var kenmerk_geg = bepaalKenmerkGegevens(pModule, pSubpath);
|
||
result.kenmerkoms = kenmerk_geg.kenmerk_omschrijving;
|
||
result.kenmerktype = kenmerk_geg.kenmerk_type;
|
||
result.kenmerksysteem = kenmerk_geg.kenmerk_systeem;
|
||
}
|
||
else if (pModule != "FAQ")
|
||
{
|
||
if (pModule == "MLD" && pNiveau == "O")
|
||
result.trackcode = "ORD" + "UPD";
|
||
else if (pModule == "INS" && pNiveau == "I")
|
||
result.trackcode = "INS" + "CUP";
|
||
else
|
||
result.trackcode = pModule + "UPD";
|
||
var kenmerk_geg = bepaalKenmerkGegevens(pModule, pSubpath);
|
||
result.kenmerkoms = kenmerk_geg.kenmerk_omschrijving;
|
||
result.kenmerktype = kenmerk_geg.kenmerk_type;
|
||
result.kenmerksysteem = kenmerk_geg.kenmerk_systeem;
|
||
result.regexp = (result.regexp ? result.regexp : kenmerk_geg.kenmerk_regexp);
|
||
}
|
||
break;
|
||
case "ALGPHL":
|
||
case "ALGPHG":
|
||
case "ALGPHT":
|
||
// Bestanden zijn te vinden op ...cust/x/photos
|
||
result.AttachRootPath = Server.MapPath(S("alg_image_path"));
|
||
/* result.RelativePath => Wordt verderop al geregeld */
|
||
if (pModule == "ALGPHL")
|
||
result.AttachRootPath += '/locatie';
|
||
if (pModule == "ALGPHG")
|
||
result.AttachRootPath += '/gebouw';
|
||
if (pModule == "ALGPHT")
|
||
result.AttachRootPath += '/terrein';
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.multi = true;
|
||
result.regexp = S("alg_photo_size");
|
||
result.directlink = true;
|
||
/* result.linkImmediate = "discipline"; TODO */
|
||
if (typeof pKey == "string")
|
||
params.filter = pKey;
|
||
break;
|
||
case "RESPH":
|
||
case "RESPHA":
|
||
case "RESPHD":
|
||
// Bestanden zijn te vinden op ...cust/x/photos
|
||
result.AttachRootPath = Server.MapPath(S("res_image_path"));
|
||
/* result.RelativePath => Wordt verderop al geregeld */
|
||
if (pModule == "RESPHA")
|
||
result.AttachRootPath += '/artikel';
|
||
if (pModule == "RESPHD")
|
||
result.AttachRootPath += '/deel';
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("res_photo_size");
|
||
result.directlink = true;
|
||
/* result.linkImmediate = "discipline"; TODO */
|
||
if (typeof pKey == "string")
|
||
params.filter = pKey;
|
||
break;
|
||
case "MRK":
|
||
result.AttachRootPath = Server.MapPath(S("mrk_image_path"));
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.AttachPath += (pKey > 0? subfolderKey("M", pKey)
|
||
: subfolderNew("M", Session.SessionId));
|
||
result.AttachPath += "/1/";
|
||
result.RelativePath = S("mrk_image_path") + subfolderKey("M", pKey) + "/1/";
|
||
result.multi = false; // vooralsnog maar eentje
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("mrk_photo_size");
|
||
result.directlink = true;
|
||
break;
|
||
case "SML":
|
||
result.AttachRootPath = Server.MapPath(S("prs_image_path"));
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.AttachPath += subfolderKey("P", pKey);
|
||
result.AttachPath += "/SML/";
|
||
result.RelativePath = S("prs_image_path") + subfolderKey("P", pKey) + "/SML/";
|
||
result.multi = false; // vooralsnog maar eentje
|
||
result.forcesingle = true; // verwijder eventuele anderen
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("sml_photo_size"); // "r200x150", Resized naar binnen 200x150 (zonder crop, met behoud aspect ratio)
|
||
result.directlink = true;
|
||
break;
|
||
case "INSDEEL": // Flex oplossing voor een Image bij ins_srtdeel (ins_srtdeel_image) die getoond wordt bij een object (ins_deel).
|
||
result.AttachRootPath = Server.MapPath(S("ins_image_path"));
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.AttachPath += subfolderKey("I", pKey);
|
||
result.AttachPath += "/INSDEEL/";
|
||
result.RelativePath = S("ins_image_path") + subfolderKey("I", pKey) + "/INSDEEL/";
|
||
result.multi = false; // vooralsnog maar eentje
|
||
result.forcesingle = true; // verwijder eventuele anderen
|
||
result.extFilter = S("imgAllowedExt"); // alleen de extensies met een pipe gescheiden
|
||
result.regexp = S("ins_photo_size"); // "r200x150", Resized naar binnen 200x150 (zonder crop, met behoud aspect ratio)
|
||
result.directlink = true;
|
||
break;
|
||
case "INSPHD":
|
||
// Deze vervangt de flexoplossing.
|
||
// Bestanden zijn te vinden op ...cust/x/photos
|
||
result.AttachRootPath = Server.MapPath(S("ins_image_path"));
|
||
result.AttachRootPath += '/deel';
|
||
result.RelativePath = S("ins_image_path") + "/deel/";
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("ins_photo_size"); // "r200x150", Resized naar binnen 200x150 (zonder crop, met behoud aspect ratio)
|
||
result.directlink = true;
|
||
result.linkImmediate = "ins_deel";
|
||
if (typeof pKey === "string") {
|
||
params.filter = "^" + safe.regexp(pKey) + "$";
|
||
}
|
||
break;
|
||
case "MENU":
|
||
result.AttachRootPath = Server.MapPath(S("menu_image_path"));
|
||
result.RelativePath = S("menu_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = S("flexExtensionFilter"); // was "jpg|png"; maar tegenwoordig ook andere bestanden
|
||
result.regexp = S("menu_photo_size");
|
||
result.directlink = true;
|
||
result.linkImmediate = "fac_menu";
|
||
if (typeof pKey === "string") {
|
||
params.filter = "^" + safe.regexp(pKey) + "$";
|
||
}
|
||
break;
|
||
case "BDRADR":
|
||
result.AttachRootPath = S("bdradrfiles_path");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.pickfile = true;
|
||
result.multi = true;
|
||
result.extFilter = S("flexExtensionFilter"); // Mag in principe alles zijn
|
||
break;
|
||
case "CUSTXSL":
|
||
result.AttachRootPath = Server.MapPath(custpath + "/xsl");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.multi = true;
|
||
result.extFilter = "xsl";
|
||
result.keephistory = true;
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk xsl toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
break;
|
||
case "CUSTIMP":
|
||
result.AttachRootPath = Server.MapPath(custpath + "/import");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.multi = true;
|
||
result.extFilter = "log";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk log toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "CUSTEXP":
|
||
result.AttachRootPath = Server.MapPath(custpath + "/export");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "log";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk log toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "CUSTTASKS":
|
||
result.AttachRootPath = Server.MapPath(custpath + "/tasks"); // Volgens mij is hier sinds 2019.2 niets meer te vinden
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "log";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk log toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "CUSTEXCH":
|
||
result.AttachRootPath = Server.MapPath(custpath + "/exchange");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "log";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk log toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 0);
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "CUSTTEMP":
|
||
result.AttachRootPath = shared.tempFolder();
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "xml|json|txt|html|log";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan, altijd fijn
|
||
result.searchfile = true;
|
||
result.maxfiles = 5;
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "CUSTTEMPPUO":
|
||
result.AttachRootPath = shared.tempFolder() + "/putorders";
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "xml|json|txt|html";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan. Ik weet dat putorders toevallig sorteerbare namen aanmaakt
|
||
result.searchfile = true;
|
||
result.maxfiles = 5;
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "AIAI":
|
||
result.AttachRootPath = Server.MapPath(rooturl + "/temp/_AiAi_error");
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "html";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan.
|
||
result.searchfile = true;
|
||
result.nodigest = true; // overbodig voor logfiles
|
||
result.maxfiles = 5;
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "SMTP": // Veronderstel hMailserver op default locatie
|
||
result.AttachRootPath = "C:\\Program Files (x86)\\hMailServer\\Logs";
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "log|zip";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan.
|
||
result.searchfile = true;
|
||
result.nodigest = true; // overbodig voor logfiles
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "SHIB": // Veronderstel Shibboleth op default locatie
|
||
result.AttachRootPath = "C:\\opt\\shibboleth-sp\\var\\log\\shibboleth";
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
result.extFilter = "log|[0-9]*";
|
||
settings.overrule_setting("flexAllowedExt", result.extFilter); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan.
|
||
result.searchfile = true;
|
||
result.nodigest = true; // shibd.log wil nog wel eens locked zijn
|
||
result.autfunctionapiread = 'WEB_FACTAB';
|
||
result.autfunctionapiwrite = 'WEB_FACTAB';
|
||
break;
|
||
case "EXPORTS": // EXPORTS/FIN
|
||
var export_app_key = params.imp_exp_key;
|
||
if (export_app_key > 0)
|
||
{
|
||
sql = "SELECT * FROM fac_export_app WHERE fac_export_app_key = " + export_app_key;
|
||
}
|
||
else
|
||
{
|
||
var export_code = params.iecode;
|
||
sql = "SELECT * FROM fac_export_app WHERE fac_export_app_code = " + safe.quoted_sql_upper(export_code);
|
||
}
|
||
|
||
var oRs = Oracle.Execute(sql);
|
||
if (oRs.Eof)
|
||
shared.simpel_page("Undefined export " + (export_app_key || export_code));
|
||
|
||
result.autfunctionapiread = oRs("fac_functie_key").Value;
|
||
result.autfunctionapibrowse = oRs("fac_export_app_browse_f_key").Value;
|
||
//result.autfunctionapiwrite = oRs("fac_functie_key").Value;
|
||
result.AttachRootPath = oRs("fac_export_app_folder").Value;
|
||
if (!result.AttachRootPath)
|
||
shared.simpel_page("No export folder configured");
|
||
if (result.AttachRootPath.substr(1, 1) != ":") // dan relatief
|
||
{
|
||
result.AttachRootPath = Server.MapPath(custpath + "/export/" + result.AttachRootPath);
|
||
result.AttachRootPath = fso.GetAbsolutePathName(result.AttachRootPath); // voor de vele ../export/
|
||
}
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
var postfix = oRs("fac_export_app_postfix").Value;
|
||
if (postfix && postfix.indexOf(".") > -1)
|
||
{
|
||
result.extFilter = postfix.split(".").pop();
|
||
}
|
||
if ((oRs("fac_export_app_flags").Value||0) & 1)
|
||
result.extFilter = "zip";
|
||
//settings.overrule_setting("flexAllowedExt", oRs("fac_folder_extfilter").Value); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan.
|
||
result.searchfile = true;
|
||
result.maxfiles = 10;
|
||
oRs.Close();
|
||
break;
|
||
case "IMPORTS": // IMPORTS/PRS
|
||
var import_app_key = params.imp_exp_key;
|
||
if (import_app_key > 0)
|
||
{
|
||
sql = "SELECT * FROM fac_import_app WHERE fac_import_app_key = " + import_app_key;
|
||
}
|
||
else
|
||
{
|
||
var import_code = params.iecode;
|
||
sql = "SELECT * FROM fac_import_app WHERE fac_import_app_code = " + safe.quoted_sql_upper(import_code)
|
||
}
|
||
|
||
var oRs = Oracle.Execute(sql);
|
||
if (oRs.Eof)
|
||
shared.simpel_page("Undefined import " + (import_app_key || import_code));
|
||
result.autfunctionapiwrite = oRs("fac_functie_key").Value;
|
||
result.autfunctionapiread = oRs("fac_functie_key").Value;
|
||
result.autfunctionapibrowse = oRs("fac_import_app_browse_f_key").Value;
|
||
result.AttachRootPath = oRs("fac_import_app_folder").Value;
|
||
if (!result.AttachRootPath)
|
||
shared.simpel_page("No import folder configured");
|
||
if (result.AttachRootPath && result.AttachRootPath.substr(1, 1) != ":") // dan relatief
|
||
{
|
||
result.AttachRootPath = Server.MapPath(custpath + "/import/" + result.AttachRootPath);
|
||
// result.AttachRootPath = fso.GetAbsolutePathName(result.AttachRootPath); // voor als we ooit .. in padnamen moeten ondersteunen
|
||
}
|
||
result.AttachPath = result.AttachRootPath + "/";
|
||
//result.extFilter = oRs("fac_folder_extfilter").Value;
|
||
//settings.overrule_setting("flexAllowedExt", oRs("fac_folder_extfilter").Value); // tijdelijk meer toestaan
|
||
settings.overrule_setting("flexFilesOrdering", 1); // nieuwste bovenaan.
|
||
result.searchfile = true;
|
||
result.maxfiles = 10;
|
||
oRs.Close();
|
||
break;
|
||
case "STYLE": /* TODO */
|
||
result.AttachRootPath = Server.MapPath(S("style_image_path"));
|
||
result.RelativePath = S("style_image_path");
|
||
result.AttachPath = result.AttachRootPath + "/" + pKey + "/"; // pKey = de naam van het style-item
|
||
result.extFilter = S("imgAllowedExt");
|
||
result.regexp = S("menu_photo_size"); // TODO
|
||
result.directlink = true; // ?
|
||
break;
|
||
default:
|
||
_AiAi("INTERNAL_ERROR, invalid module {0}".format(pModule));
|
||
}
|
||
|
||
if (result.AttachRootPath.indexOf("..") > -1 || // paranoia mode, should never happen
|
||
result.AttachPath.indexOf("..") > -1)
|
||
{
|
||
__DoLog("Bad attach path with '..'\nAttachRootPath: {0}\nAttachPath: {1}".format(result.AttachRootPath, result.AttachPath), '#F00');
|
||
INTERNAL_ERROR_BAD_ATTACHPATH;
|
||
}
|
||
|
||
if (params.resizeCode)
|
||
result.resizeCode = params.resizeCode;
|
||
result.AttachRootPath = result.AttachRootPath.replace("..", "_");
|
||
result.AttachPath = result.AttachPath.replace("..", "_");
|
||
|
||
if (typeof result.linkImmediate === "string") { // Alleen tabelnaam mag ook, dan gaan we uit van _key en _image column-namen
|
||
if (result.linkImmediate === "discipline") {
|
||
result.linkImmediate = {
|
||
"table" : "ins_tab_discipline",
|
||
"key_col" : "ins_discipline_key",
|
||
"link_col": "ins_discipline_image"
|
||
}
|
||
} else {
|
||
result.linkImmediate = {
|
||
"table" : result.linkImmediate,
|
||
"key_col" : result.linkImmediate + "_key",
|
||
"link_col": result.linkImmediate + "_image"
|
||
}
|
||
}
|
||
}
|
||
|
||
if (result.fac_bijlagen && ((pKey > 0) || params.bijlagen_key > 0))
|
||
{
|
||
var v_bijlagen = get_bijlagen(pModule, pKey, pKenmerk_key, params.bijlagen_key, pNiveau, params.kenmerk_geldig);
|
||
for (b = 0; b < v_bijlagen.length; b++)
|
||
{
|
||
var filedata = oneFileInfo(v_bijlagen[b], result, pModule, pKey, pSubpath, pNiveau, params);
|
||
result.files.push(filedata);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
|
||
if (params.getFile)
|
||
{
|
||
if (fso.FileExists(result.AttachPath + params.getFile))
|
||
{
|
||
var fsoFile = fso.GetFile(result.AttachPath + params.getFile);
|
||
var extension = fsoFile.Name.split(".").pop().toLowerCase();
|
||
var ffile = { key: -1
|
||
, name: fsoFile.Name
|
||
, mimetype: S("flex_mimetypes")[extension]||null
|
||
, diskname: ""
|
||
, date: new Date(fsoFile.DateLastModified)
|
||
, size: fsoFile.Size
|
||
, digest: (result.nodigest||params.nodigest)?null:oCrypto.hex_sha1_file(result.AttachPath + fsoFile.Name)
|
||
}
|
||
var filedata = oneFileInfo(ffile, result, pModule, pKey, pSubpath, pNiveau, params);
|
||
result.files.push(filedata);
|
||
}
|
||
}
|
||
else if (params.getFiles)
|
||
{
|
||
if (fso.FolderExists(result.AttachPath))
|
||
{
|
||
__Log("Scanning {0} for files".format(result.AttachPath));
|
||
var f = fso.GetFolder(result.AttachPath);
|
||
var fc = new Enumerator(f.files);
|
||
|
||
if ("linkImmediate" in result && pKey > 0) {
|
||
params.filter = "^";
|
||
var sql = "SELECT " + result.linkImmediate.link_col
|
||
+ " FROM " + result.linkImmediate.table
|
||
+ " WHERE " + result.linkImmediate.key_col + " = " + pKey;
|
||
var oRs = Oracle.Execute(sql);
|
||
if (!oRs.EoF) {
|
||
var linkedFilename = oRs(0).Value;
|
||
if (linkedFilename && pModule.indexOf("FGII") === 0) { // Deze worden mogelijk zonder extensie opgeslagen in de DB
|
||
linkedFilename = linkedFilename.replace(/(\.dwf)?$/, ".dwf");
|
||
}
|
||
params.filter += safe.regexp(linkedFilename);
|
||
}
|
||
oRs.Close();
|
||
params.filter += "$";
|
||
}
|
||
|
||
var totalfiles = 0;
|
||
for (; !fc.atEnd(); fc.moveNext())
|
||
{
|
||
totalfiles ++;
|
||
var fsoFile = fc.item();
|
||
if (params.filter && !(new RegExp(params.filter, "i").test(fsoFile.Name))) {
|
||
continue;
|
||
}
|
||
|
||
if (result.extFilter && !(new RegExp(".({0})$".format(result.extFilter), "i").test(fsoFile.Name))) {
|
||
continue;
|
||
}
|
||
var extension = fsoFile.Name.split(".").pop().toLowerCase();
|
||
var ffile = { key: -1
|
||
, name: fsoFile.Name
|
||
, mimetype: S("flex_mimetypes")[extension]
|
||
, diskname: ""
|
||
, date: new Date(fsoFile.DateLastModified)
|
||
, size: fsoFile.Size
|
||
, digest: (result.nodigest||params.nodigest)?null:oCrypto.hex_sha1_file(result.AttachPath + fsoFile.Name)
|
||
}
|
||
|
||
if (result.keephistory && ffile.name.match(/_20[0-9]{6}_[0-9]{6}\./))
|
||
{
|
||
ffile.ishistory = true;
|
||
}
|
||
var filedata = oneFileInfo(ffile, result, pModule, pKey, pSubpath, pNiveau, params);
|
||
result.files.push(filedata);
|
||
}
|
||
__Log("Found {0}/{1} files".format(result.files.length, totalfiles));
|
||
}
|
||
else
|
||
__Log("Folder does not exist (yet): " + result.AttachPath);
|
||
|
||
}
|
||
}
|
||
|
||
result.isAllowedName = function _isAllowedName(FileName)
|
||
{
|
||
if (result.extFilter)
|
||
{
|
||
var regFilter = result.extFilter;
|
||
regFilter = regFilter.replace(/( |,|;)/g,"|"); // Altijd | karakter
|
||
regFilter = ".*\\." + "(" + regFilter + ")$"; // er moet een punt voor en extensie is aan het einde
|
||
}
|
||
else
|
||
regFilter = ".*";
|
||
return (new RegExp(S("flexAllowedExt"), "ig").test(FileName) &&
|
||
new RegExp(regFilter, "ig").test(FileName));
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
function oneFileInfo(pFileData, pResult, pModule, pKey, pSubpath, pNiveau, params)
|
||
{
|
||
var filedata = pFileData;
|
||
var fName = filedata.name;
|
||
var fSubPath = (filedata.diskpath ? filedata.diskpath : pResult.AttachsubPath);
|
||
var fAttachPath = pResult.AttachRootPath + "/" + (fSubPath ? fSubPath + "/" : "");
|
||
if (params.getFileEncoded == "base64" || params.getFileEncoded == "hex")
|
||
{
|
||
if (fso.FileExists(fAttachPath + fName))
|
||
{
|
||
// Verleidelijk om new ActiveXObject("SLNKDWF.Crypto").base64 in te zetten
|
||
// Die kan echter alleen text-input aan, niet binary data
|
||
var oStream = Server.CreateObject("ADODB.Stream");
|
||
oStream.Open;
|
||
oStream.Type = 1; // adTypeBinary
|
||
oStream.LoadFromFile(safe.UNC(fAttachPath + fName));
|
||
|
||
var oXML = new ActiveXObject("Msxml2.DOMDocument.6.0");
|
||
var oNode = oXML.createElement("encodeddata");
|
||
oNode.dataType = params.getFileEncoded == "base64"?"bin.base64":"bin.hex"; // Zeer snelle oplossing
|
||
oNode.nodeTypedValue = oStream.read(oStream.Size);
|
||
filedata.data = oNode.text.replace(/\n/g, ""); // Ik wil de newlines er niet in hebben
|
||
oStream.Close();
|
||
}
|
||
else
|
||
__Log("Bestand niet aangetroffen in: " + fAttachPath + fName);
|
||
}
|
||
|
||
// IIS 7+ geeft 404.11 op een plus-teken in een url. Historisch hebben we daar
|
||
// vele bestanden mee en die hernoemen we hier on-the-fly. Er kan nu een
|
||
// afwijking ontstaan bij 'F' kenmerken. die in de database zijn opgeslagen
|
||
// maar dat nemen we voor lief. In de praktijk is dat nooit probleem.
|
||
// Als we *niet* hernoemen hebben we grotere problemen
|
||
if (fName.toLowerCase() != safe.filename(fName).toLowerCase())
|
||
{
|
||
filedata.name = safe.filename(fName);
|
||
__DoLog("Auto renaming {0} to safer {1}".format(fAttachPath + fName, fAttachPath + filedata.name), "#FFFF00");
|
||
if (!fso.fileExists(fAttachPath + filedata.name))
|
||
{
|
||
fso.MoveFile(fAttachPath + fName, fAttachPath + filedata.name);
|
||
var sql_u = "UPDATE fac_bijlagen"
|
||
+ " SET fac_bijlagen_filename = " + safe.quoted_sql(filedata.name)
|
||
+ " WHERE fac_bijlagen_key = " + filedata.key;
|
||
Oracle.Execute(sql_u);
|
||
}
|
||
}
|
||
|
||
if (params.resizeCode)
|
||
{
|
||
var resize_params = { resizecode: params.resizeCode
|
||
, attachpath: pResult.AttachPath
|
||
, filename: filedata.name
|
||
, safename: pResult.safefilename
|
||
, digest: filedata.digest
|
||
, isupload: false
|
||
};
|
||
var resize_result = resizePicture(resize_params);
|
||
if (resize_result.newsize && (resize_result.newsize > 0))
|
||
{
|
||
filedata.resized = resize_result.file_resized;
|
||
filedata.tempdelete = resize_result.file_tempdelete;
|
||
}
|
||
}
|
||
|
||
if (params.tmpfolder)
|
||
{
|
||
filedata.token = params.tmpfolder;
|
||
}
|
||
else if (params.api2name == 'files')
|
||
{
|
||
filedata.deepurl = HTTP.urlzelf() + "/api2/{0}/{1}{2}/{3}".format(
|
||
params.api2name,
|
||
params.module.toLowerCase(),
|
||
(params.module.match(/IMPORTS|EXPORTS/)?"/"+params.iecode:""),
|
||
safe.filename(filedata.name) // onze filename is ondertussen dusdanig safe
|
||
// dat ik het zonder encoding aandurf
|
||
);
|
||
}
|
||
else if (params.api2name)
|
||
{
|
||
filedata.deepurl = HTTP.urlzelf() + "/api2/{0}/{1}/attachments/{2}/{3}".format(
|
||
params.api2name,
|
||
pKey,
|
||
pSubpath,
|
||
safe.filename(filedata.name) // onze filename is ondertussen dusdanig safe
|
||
// dat ik het zonder encoding aandurf
|
||
);
|
||
}
|
||
else
|
||
{
|
||
if (pResult.directlink)
|
||
{
|
||
var root = HTTP.urlzelfnoroot() + pResult.RelativePath;
|
||
if (pModule.substr(0, 5) == "ALGPH") {
|
||
root = HTTP.urlzelfnoroot() + S("alg_image_path");
|
||
if (pModule == "ALGPHL")
|
||
root += 'locatie/';
|
||
if (pModule == "ALGPHG")
|
||
root += 'gebouw/';
|
||
if (pModule == "ALGPHT")
|
||
root += 'terrein/';
|
||
} else if (pModule.substr(0, 5) == "RESPH") {
|
||
root = HTTP.urlzelfnoroot() + S("res_image_path");
|
||
if (pModule == "RESPHA")
|
||
root += 'artikel/';
|
||
if (pModule == "RESPHD")
|
||
root += 'deel/';
|
||
}
|
||
filedata.deepurl = root + filedata.name;
|
||
}
|
||
else // Alleen streaming, bestand staat buiten webroot?
|
||
{
|
||
var deepurl = HTTP.urlzelf() + "/appl/shared/BijlagenStream.asp"
|
||
+ "?module=" + pModule;
|
||
if (filedata.key > 0)
|
||
{
|
||
deepurl += "&bijlagen_key=" + filedata.key;
|
||
}
|
||
else
|
||
{
|
||
deepurl += "&key=" + pKey
|
||
+ (pNiveau? "&niveau=" + pNiveau : "")
|
||
+ "&kenmerk_key=" + pSubpath
|
||
+ "&filename=" + Server.URLencode(filedata.name);
|
||
}
|
||
filedata.deepurl = protectQS.create(deepurl);
|
||
}
|
||
}
|
||
return filedata;
|
||
}
|
||
|
||
function resizePicture(pic)
|
||
{
|
||
// Resize een plaatje eventueel (bij upload)
|
||
var result = {};
|
||
pic.safename = pic.safename || pic.filename;
|
||
__Log("Resizing: " + pic.filename);
|
||
var oIMG = new ActiveXObject("SLNKDWF.ImageConvert");
|
||
var filter = ".*\\.(" + S("imgAllowedExt") + ")$"; //Aangezien dit niet gebeurt in fac_set.src (zoals dat bij flexAllowedExt gebeurt)
|
||
if (new RegExp(filter, "ig").test(pic.filename))
|
||
{
|
||
try
|
||
{
|
||
oIMG.Open(pic.attachpath + pic.filename);
|
||
}
|
||
catch(e)
|
||
{
|
||
__DoLog("Kan plaatje {0} niet laden\n{1}".format(pic.attachpath + pic.filename, e.description));
|
||
// Gewoon negeren
|
||
return result;
|
||
}
|
||
|
||
if (pic.resizecode)
|
||
{
|
||
var Format = pic.resizecode.match(/^([RrCc])(\d*)x(\d*)$/i); // R800x600
|
||
if (Format && Format.length == 4)
|
||
{
|
||
var RrCc = Format[1];
|
||
var h0 = h = parseInt(Format[2], 10);
|
||
var w0 = w = parseInt(Format[3], 10);
|
||
if (RrCc == "R" || RrCc == "r") // Dan niet croppen maar aspect ratio behouden
|
||
{
|
||
if (oIMG.Width * h > w * oIMG.Height)
|
||
h = parseInt(oIMG.Height / oIMG.Width * w);
|
||
else
|
||
w = parseInt(oIMG.Width / oIMG.Height * h);
|
||
}
|
||
|
||
if (oIMG.Height < h || oIMG.Width < w) // Zou er iets vergroot gaan worden.
|
||
{
|
||
if (RrCc == "R" || RrCc == "C") // Dan zijn we streng en eisen we minimale afmeting
|
||
{
|
||
result.message = L("lcl_shared_photo_small").format(h0, w0, oIMG.Height, oIMG.Width);
|
||
DeleteFile(pic.attachpath + pic.safename);
|
||
}
|
||
else // Dan maar niet, we vergroten niet.
|
||
{
|
||
h = oIMG.Height;
|
||
w = oIMG.Width;
|
||
}
|
||
}
|
||
|
||
if (!result.message && (oIMG.Height != h || oIMG.Width != w))
|
||
{
|
||
try {
|
||
__Log("Resize/Cropping from w=" + oIMG.Width + " h=" + oIMG.Height + " to w=" + w + " h=" + h);
|
||
oIMG.Width = w;
|
||
oIMG.Height = h;
|
||
var tempfile = shared.tempFolder() + "/img_" + customerId + "_" + pic.digest + "_" + pic.resizecode + "." + fso.GetExtensionName(pic.filename);
|
||
oIMG.SaveAs(tempfile);
|
||
result.newsize = getFilesize(tempfile);
|
||
result.file_resized = tempfile;
|
||
if (__Logging == 0)
|
||
result.file_tempdelete = tempfile; // Moet aanroeper opruimen
|
||
}
|
||
catch (e)
|
||
{
|
||
__DoLog(L("lcl_shared_thumbnail_error") + e.description, "#f00")
|
||
result.message = L("lcl_shared_thumbnail_error");
|
||
// Gewoon opruimen
|
||
DeleteFile(pic.attachpath + pic.safename);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (!result.message)
|
||
{
|
||
switch(pic.module)
|
||
{
|
||
case "INSDEEL": // Thumb altijd voor zowel INSDEEL als SML
|
||
case "SML": // Thumb altijd
|
||
try
|
||
{
|
||
var maxThumbW = 60;
|
||
var maxThumbH = 80;
|
||
if (oIMG.Width / oIMG.Height > maxThumbW / maxThumbH)
|
||
{
|
||
oIMG.Height = oIMG.Height / oIMG.Width * maxThumbW;
|
||
oIMG.Width = maxThumbW;
|
||
}
|
||
else
|
||
{
|
||
oIMG.Width = oIMG.Width / oIMG.Height * maxThumbH;
|
||
oIMG.Height = maxThumbH;
|
||
}
|
||
CreateFullPath(pic.attachpath + "thumb/");
|
||
oIMG.SaveAs(pic.attachpath + "thumb/" + pic.safename);
|
||
}
|
||
catch (e)
|
||
{
|
||
__DoLog(L("lcl_shared_thumbnail_error") + e.description, "#f00")
|
||
result.message = L("lcl_shared_thumbnail_error");
|
||
DeleteFile(pic.attachpath + "thumb/" + pic.safename);
|
||
}
|
||
break;
|
||
default: __Log("No thumbnail for module " + pic.module); // Bijv. flexkenmerk foto
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function get_bijlagen(p_module, p_refkey, p_kenmerkkey, p_flexwaarde, pNiveau, pkenmerk_geldig)
|
||
{
|
||
var sql = "SELECT DISTINCT"
|
||
+ " b.fac_bijlagen_key"
|
||
+ " , b.fac_bijlagen_refkey"
|
||
+ " , r.fac_bijlagen_key root_key"
|
||
+ " , r.fac_bijlagen_refkey root_refkey"
|
||
+ " , TRIM(TRANSLATE(SUBSTR(r.fac_bijlagen_disk_directory,5,1), '0123456789', ' ')) fac_bijlagen_niveau"
|
||
+ " , r.fac_bijlagen_kenmerk_key"
|
||
+ " , r.fac_bijlagen_root_key"
|
||
+ " , r.fac_bijlagen_disk_directory"
|
||
+ " , r.fac_bijlagen_disk_filename"
|
||
+ " , b.fac_bijlagen_filename"
|
||
+ " , r.fac_bijlagen_file_size"
|
||
+ " , b.fac_bijlagen_aanmaak"
|
||
+ " , r.fac_bijlagen_digest"
|
||
+ " FROM fac_bijlagen r"
|
||
+ " , fac_bijlagen b"
|
||
+ " WHERE r.fac_bijlagen_verwijder IS NULL"
|
||
+ " AND b.fac_bijlagen_verwijder IS NULL"
|
||
+ " AND b.fac_bijlagen_root_key = r.fac_bijlagen_key"
|
||
+ " AND b.fac_bijlagen_module = " + safe.quoted_sql(p_module);
|
||
|
||
if (p_flexwaarde) // JGL: volgens mij is dit nooit een bestandsnaam (is ook niet uniek)
|
||
{ // sterker nog: ik kan geen codepad vinden waarbij deze parameter daadwerkelijk gezet raakt?
|
||
var v_flexwaarde = parseInt(p_flexwaarde, 10);
|
||
if (isNaN(v_flexwaarde))
|
||
{
|
||
sql += " AND b.fac_bijlagen_filename = " + safe.quoted_sql(p_flexwaarde);
|
||
}
|
||
else
|
||
{
|
||
sql += (v_flexwaarde > 0 ? " AND b.fac_bijlagen_key = " + v_flexwaarde : "");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sql += " AND b.fac_bijlagen_refkey = " + p_refkey;
|
||
if (p_kenmerkkey > 0)
|
||
{
|
||
sql += " AND b.fac_bijlagen_kenmerk_key = " + p_kenmerkkey;
|
||
}
|
||
else // moet pNiveau gezet zijn bij diverse modules
|
||
{
|
||
var sql_kenmerk;
|
||
switch (p_module)
|
||
{
|
||
case "MLD":
|
||
if (pNiveau == 'M') // melding
|
||
{
|
||
if (pkenmerk_geldig) // toon alleen de geldige (bijlage) kenmerken
|
||
sql_kenmerk = "SELECT k.mld_kenmerk_key"
|
||
+ " FROM mld_melding m"
|
||
+ " , mld_stdmelding s"
|
||
+ " , mld_discipline d"
|
||
+ " , mld_kenmerk k"
|
||
+ " , mld_srtkenmerk t"
|
||
+ " WHERE m.mld_stdmelding_key = s.mld_stdmelding_key"
|
||
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
|
||
+ " AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
|
||
+ " AND k.mld_kenmerk_verwijder IS NULL"
|
||
+ " AND t.mld_srtkenmerk_verwijder IS NULL"
|
||
+ " AND t.mld_srtkenmerk_kenmerktype IN ('M', 'F', 'E', 'X')"
|
||
+ " AND ( (k.mld_kenmerk_niveau = 'A' AND k.mld_stdmelding_key IS NULL)"
|
||
+ " OR (k.mld_kenmerk_niveau = 'S' AND k.mld_stdmelding_key = s.mld_stdmelding_key)"
|
||
+ " OR (k.mld_kenmerk_niveau = 'D' AND k.mld_stdmelding_key = s.mld_ins_discipline_key)"
|
||
+ " OR (k.mld_kenmerk_niveau = 'T' AND k.mld_stdmelding_key = d.ins_srtdiscipline_key)"
|
||
+ " )"
|
||
+ " AND m.mld_melding_key = " + p_refkey;
|
||
else
|
||
sql_kenmerk = "SELECT mld_kenmerk_key FROM mld_kenmerk WHERE mld_kenmerk_niveau IN ('T', 'D', 'S', 'A')";
|
||
}
|
||
else // opdracht
|
||
{
|
||
if (pkenmerk_geldig)
|
||
sql_kenmerk = "SELECT k.mld_kenmerk_key"
|
||
+ " FROM mld_opdr o"
|
||
+ " , mld_srtkenmerk t"
|
||
+ " , mld_kenmerk k"
|
||
+ " WHERE k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
|
||
+ " AND k.mld_kenmerk_verwijder IS NULL"
|
||
+ " AND t.mld_srtkenmerk_verwijder IS NULL"
|
||
+ " AND ( (k.mld_kenmerk_niveau = 'P' AND k.mld_typeopdr_key IS NULL)"
|
||
+ " OR (k.mld_kenmerk_niveau = 'O' AND k.mld_typeopdr_key = o.mld_typeopdr_key)"
|
||
+ " )"
|
||
+ " AND t.mld_srtkenmerk_kenmerktype IN ('M', 'F', 'E', 'X')"
|
||
+ " AND o.mld_opdr_key = " + p_refkey;
|
||
else
|
||
sql_kenmerk = "SELECT mld_kenmerk_key FROM mld_kenmerk WHERE mld_kenmerk_niveau IN ('O', 'P')";
|
||
}
|
||
break;
|
||
case "ALG":
|
||
sql_kenmerk = "SELECT alg_kenmerk_key FROM alg_kenmerk WHERE alg_kenmerk_niveau = " + safe.quoted_sql(pNiveau);
|
||
break;
|
||
case "BES":
|
||
sql_kenmerk = "SELECT bes_kenmerk_key FROM bes_kenmerk WHERE bes_kenmerk_niveau = " + safe.quoted_sql(pNiveau);
|
||
break;
|
||
//case "INS":
|
||
// sql_kenmerk = "SELECT ins_kenmerk_key FROM ins_kenmerk WHERE ins_kenmerk_niveau = " + safe.quoted_sql(pNiveau);
|
||
// break;
|
||
case "PRS":
|
||
sql_kenmerk = "SELECT prs_kenmerk_key FROM prs_kenmerk WHERE prs_kenmerk_niveau = " + safe.quoted_sql(pNiveau);
|
||
break;
|
||
case "RES":
|
||
{
|
||
if (pkenmerk_geldig)
|
||
sql_kenmerk = "SELECT k.res_kenmerk_key"
|
||
+ " FROM res_rsv_ruimte r"
|
||
+ " , res_kenmerk k"
|
||
+ " , res_srtkenmerk s"
|
||
+ " WHERE r.res_activiteit_key = k.res_activiteit_key"
|
||
+ " AND k.res_srtkenmerk_key = s.res_srtkenmerk_key"
|
||
+ " AND k.res_kenmerk_verwijder IS NULL"
|
||
+ " AND s.res_srtkenmerk_verwijder IS NULL"
|
||
+ " AND s.res_srtkenmerk_kenmerktype IN ('M','F','E','X')"
|
||
+ " AND r.res_rsv_ruimte_key = " + p_refkey;
|
||
else
|
||
sql_kenmerk = "SELECT res_kenmerk_key FROM res_kenmerk WHERE res_kenmerk_niveau = " + safe.quoted_sql(pNiveau);
|
||
}
|
||
break;
|
||
}
|
||
if (sql_kenmerk)
|
||
sql += " AND b.fac_bijlagen_kenmerk_key IN ({0}) ".format(sql_kenmerk);
|
||
|
||
}
|
||
}
|
||
|
||
var bijlagen = [];
|
||
var oRs = Oracle.Execute(sql);
|
||
while (!oRs.eof)
|
||
{
|
||
var extension = oRs("fac_bijlagen_filename").Value.split(".").pop().toLowerCase();
|
||
var ffile = { key: oRs("fac_bijlagen_key").Value
|
||
, diskpath: oRs("fac_bijlagen_disk_directory").Value
|
||
, diskname: oRs("fac_bijlagen_disk_filename").Value
|
||
, name: oRs("fac_bijlagen_filename").Value
|
||
, mimetype: S("flex_mimetypes")[extension]
|
||
, date: new Date(oRs("fac_bijlagen_aanmaak").Value)
|
||
, size: oRs("fac_bijlagen_file_size").Value
|
||
, digest: oRs("fac_bijlagen_digest").Value
|
||
, module: p_module
|
||
, niveau: oRs("fac_bijlagen_niveau").Value
|
||
, refkey: oRs("fac_bijlagen_refkey").Value
|
||
, kmkey: oRs("fac_bijlagen_kenmerk_key").Value
|
||
, rootkey: oRs("root_key").Value
|
||
, rootrefkey: oRs("root_refkey").Value
|
||
};
|
||
if (ffile.name.match(/_20[0-9]{6}_[0-9]{6}\./))
|
||
ffile.ishistory = true;
|
||
|
||
bijlagen.push(ffile);
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.Close();
|
||
__Log("{0} bestand(en) gevonden in fac_bijlagen.".format(bijlagen.length));
|
||
return bijlagen;
|
||
}
|
||
|
||
|
||
function DeleteFile(fullpath, km_params)
|
||
{
|
||
try
|
||
{
|
||
if (km_params)
|
||
{
|
||
if (km_params.AttachPath)
|
||
{
|
||
if (km_params.files.length)
|
||
{
|
||
for (var i=0; i<km_params.files.length; i++)
|
||
{
|
||
var bijlagen_key = km_params.files[i].key;
|
||
var bijlagen_naam = km_params.files[i].name;
|
||
var root_key = km_params.files[i].rootkey;
|
||
|
||
if (km_params.file && km_params.file != bijlagen_naam)
|
||
continue;
|
||
|
||
if (bijlagen_key == root_key)
|
||
{ // Het root-record wordt verwijderd.
|
||
// Haal file gegevens op voor de nieuwe plaats van het bestand en verplaats deze.
|
||
var sql_d = "SELECT f1.fac_bijlagen_key"
|
||
+ " , f1.fac_bijlagen_refkey"
|
||
+ " , f1.fac_bijlagen_kenmerk_key"
|
||
+ " , f1.fac_bijlagen_disk_directory new_dir"
|
||
+ " , f2.fac_bijlagen_disk_directory old_dir"
|
||
+ " FROM fac_bijlagen f1"
|
||
+ " , fac_bijlagen f2"
|
||
+ " WHERE f1.fac_bijlagen_root_key = f2.fac_bijlagen_key"
|
||
+ " AND f1.fac_bijlagen_key <> f2.fac_bijlagen_key"
|
||
+ " AND f1.fac_bijlagen_verwijder IS NULL"
|
||
+ " AND f2.fac_bijlagen_key = " + bijlagen_key
|
||
+ " ORDER BY f1.fac_bijlagen_key ASC";
|
||
var oRs_d = Oracle.Execute(sql_d);
|
||
if (!oRs_d.eof)
|
||
{ // Pas eventueel de verwijzing via root_key aan.
|
||
// De disk_directory wordt ook aangepast voor een record dat de nieuwe root wordt.
|
||
var sql_d = "BEGIN"
|
||
+ " flx.deleteflexbijlage(" + bijlagen_key + ");"
|
||
+ "END;";
|
||
Oracle.Execute(sql_d);
|
||
}
|
||
else
|
||
{ // Er zijn geen verwijzingen dus maar gelijk verwijderen.
|
||
var old_dir = km_params.files[i].diskpath;
|
||
var v_path = km_params.AttachRootPath + "/" + old_dir + "/" + bijlagen_naam;
|
||
fso.DeleteFile(v_path, true);
|
||
// Ook uit fac_bijlagen verwijderen.
|
||
var sql_d = "BEGIN"
|
||
+ " flx.deleteflexbijlage(" + bijlagen_key + ", TRUE);"
|
||
+ "END;";
|
||
Oracle.Execute(sql_d);
|
||
}
|
||
oRs_d.Close();
|
||
}
|
||
else
|
||
{ // Deze bijlage kan er gewoon tussenuit gehaald worden.
|
||
var sql_d = "BEGIN"
|
||
+ " flx.deleteflexbijlage(" + bijlagen_key + ");"
|
||
+ "END;";
|
||
Oracle.Execute(sql_d);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (km_params.file)
|
||
{
|
||
var v_path = km_params.AttachPath + km_params.file;
|
||
fso.DeleteFile(v_path, true);
|
||
|
||
if ("linkImmediate" in km_params && pKey > 0) { // Unlink dit bestand ook van de entiteit waar het bij hoor in de DB
|
||
var sql = "UPDATE " + km_params.linkImmediate.table
|
||
+ " SET " + km_params.linkImmediate.link_col + " = NULL"
|
||
+ " WHERE " + km_params.linkImmediate.key_col + " = " + km_params.refkey;
|
||
Oracle.Execute(sql);
|
||
}
|
||
|
||
// Pas eventueel de verwijzing via root_key aan.
|
||
// En verwijder het record daarna echt.
|
||
var sql_d = "BEGIN"
|
||
+ " flx.deleteflexbijlage"
|
||
+ "(" + safe.quoted_sql(km_params.module)
|
||
+ "," + km_params.kenmerkkey
|
||
+ "," + km_params.refkey
|
||
+ "," + safe.quoted_sql(km_params.AttachSubPath)
|
||
+ "," + safe.quoted_sql(km_params.file)
|
||
+ ");"
|
||
+ " DELETE FROM fac_bijlagen"
|
||
+ " WHERE fac_bijlagen_module = " + safe.quoted_sql(km_params.module)
|
||
+ " AND fac_bijlagen_kenmerk_key = " + km_params.kenmerkkey
|
||
+ " AND fac_bijlagen_refkey = " + km_params.refkey
|
||
+ " AND fac_bijlagen_disk_directory = " + safe.quoted_sql(km_params.AttachSubPath)
|
||
+ " AND fac_bijlagen_filename = " + safe.quoted_sql(km_params.file)
|
||
+ " AND fac_bijlagen_verwijder IS NOT NULL;"
|
||
+ "END;";
|
||
Oracle.Execute(sql_d);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (km_params.with_folder)
|
||
{
|
||
var fsoFile = fso.GetFile(fullpath);
|
||
fso.DeleteFolder(fsoFile.ParentFolder);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
fso.DeleteFile(fullpath, true);
|
||
}
|
||
}
|
||
catch (e)
|
||
{
|
||
__DoLog("Verwijderen " + fullpath + " mislukt: " + e.description, "#FFFF00");
|
||
};
|
||
}
|
||
|
||
// Verplaats alle bestanden van <20><>n folder
|
||
// Verplaatst geen subfolders
|
||
function MoveFlexfiles(vAttachPath, vAttachPath2)
|
||
{
|
||
if (vAttachPath == vAttachPath2)
|
||
{
|
||
__Log("MoveFlexfiles Skip want twee keer " + vAttachPath);
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
var fso = Server.CreateObject("Scripting.FileSystemObject")
|
||
__Log("Zoeken " + vAttachPath);
|
||
if (fso.FolderExists(vAttachPath))
|
||
{
|
||
var oFolder = fso.GetFolder(vAttachPath);
|
||
if (oFolder.files.count > 0) // Anders error
|
||
{
|
||
CreateFullPath(vAttachPath2); // het 1000-tal was er misschien nog niet.
|
||
__Log("Verplaats inhoud " + vAttachPath + "/*.* naar " + vAttachPath2 + "/");
|
||
fso.MoveFile (vAttachPath + "/*.*", vAttachPath2 + "/");
|
||
}
|
||
fso.DeleteFolder(vAttachPath);
|
||
}
|
||
}
|
||
catch(ee)
|
||
{
|
||
__DoLog("Moving files from " + vAttachPath + "<br>to " + vAttachPath2 + " failed:<br>" + ee.description, "#FFFF00");
|
||
}
|
||
fso = null;
|
||
}
|
||
|
||
function OpenFlexFile(Module, Bijlagen_key, Params)
|
||
{ // Params kan bevatten
|
||
// name: <naam van het bestand> voor als deze niet in fac_bijlagen is opgenomen, bv: bestanden uit module CUSTTEMPPUO
|
||
// mime_type: "image/png"
|
||
// contentdp: "attachment"
|
||
Params = Params || {};
|
||
var s = "../shared/BijlagenStream.asp"
|
||
s += "?bijlagen_key=" + Bijlagen_key
|
||
+ "&module=" + Module
|
||
+ (Params.niveau ? "&niveau=" + Params.niveau : "")
|
||
+ (Params.kenmerk_key > 0 ? "&kenmerk_key=" + Params.kenmerk_key : "");
|
||
|
||
if (Params.key > 0)
|
||
s += "&key=" + Params.key;
|
||
if (Params.tmpfolder && Params.tmpfolder != "")
|
||
s += "&tmpfolder=" + safe.url(Params.tmpfolder);
|
||
if (Params.name)
|
||
s += "&filename=" + safe.url(Params.name);
|
||
if (Params.mime_type)
|
||
s += "&mime=" + Params.mime_type;
|
||
if (Params.contentdp)
|
||
s += "&contentdp=" + Params.contentdp;
|
||
if (Params.dosave)
|
||
s += "&dosave=" + Params.dosave;
|
||
return s;
|
||
}
|
||
|
||
// JavaScript is erg slecht in binary data, gebruik streams
|
||
// gebaseerd op Antonin Foller, http://www.motobit.com
|
||
// Binary - VT_UI1 | VT_ARRAY data To convert To a string
|
||
// getest met encoding "bin.hex" en "bin.base64"
|
||
|
||
function encodedString2File(safefullname, attachmentString, encoding)
|
||
{
|
||
__Log("Saving {0} file to {1}".format(encoding, safefullname));
|
||
var BinaryStream = XXXXDecode(attachmentString, encoding);
|
||
BinaryStream.SaveToFile(safe.UNC(safefullname), 2); // adSaveCreateOverWrite
|
||
}
|
||
|
||
function XXXXDecode(vCode, encoding)
|
||
{
|
||
var oXML, oNode
|
||
|
||
oXML = new ActiveXObject("Msxml2.DOMDocument.6.0");
|
||
oNode = oXML.createElement("encodeddata");
|
||
oNode.dataType = encoding; // Zeer snelle oplossing
|
||
oNode.text = vCode
|
||
var Binary = oNode.nodeTypedValue;
|
||
var adTypeText = 2;
|
||
var adTypeBinary = 1;
|
||
|
||
// Create Stream object
|
||
var BinaryStream = new ActiveXObject("ADODB.Stream");
|
||
|
||
// Specify stream type - we want To save binary data.
|
||
BinaryStream.Type = adTypeBinary;
|
||
|
||
// Open the stream And write binary data To the object
|
||
BinaryStream.Open();
|
||
BinaryStream.Write(Binary);
|
||
|
||
// Change stream type To text/string
|
||
BinaryStream.Position = 0;
|
||
BinaryStream.Type = adTypeText;
|
||
|
||
// Specify charset For the output text (unicode) data.
|
||
BinaryStream.CharSet = "us-ascii";
|
||
|
||
// Open the stream And get text/string data from the object
|
||
return BinaryStream;
|
||
}
|
||
|
||
// IE doet een beetje raar als er een puntkomma in de content-disposition filenaam zit, dan negeert hij de rest
|
||
// Een bestand test.exe;.txt wordt dan zo maar 'uitgevoerd'
|
||
// Een # in de naam gaat ook raar: IE9 vervangt die zelf al door een _ maar daar vertrouwen wij niet op
|
||
// We hebben er verder geen probleem mee dat ze geupload worden (en ze bestaan ook), anders was
|
||
// toevoegen aan safe.filename natuurlijk logischer.
|
||
function safeContentName(fname)
|
||
{
|
||
return safe.filename(fname).replace(/[\;\#]+/g, "_")
|
||
}
|
||
|
||
function getFilesize(safefullpath)
|
||
{
|
||
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
||
var sz = -1;
|
||
if (fso.FileExists(safefullpath))
|
||
{
|
||
var fsoFile = fso.GetFile(safefullpath);
|
||
sz = fsoFile.Size;
|
||
}
|
||
return sz;
|
||
}
|
||
|
||
// pcontentdp kan "none" zijn, dan 'downloaden" we gewoon
|
||
function StreamFile(filePath, filename, mime, pcontentdp)
|
||
{
|
||
var safefullpath = filePath + "/" + safe.filename(filename);
|
||
|
||
var zipit = getQParamInt("zipfile", 0) == 1;
|
||
if (!zipit)
|
||
{
|
||
var autozipfile = getQParamInt("autozipfile", -1); // Als meer dan xx kB dan zippen
|
||
if (autozipfile > 0)
|
||
{
|
||
var sz = getFilesize(safefullpath);
|
||
if (sz >= autozipfile * 1024)
|
||
{
|
||
zipit = true;
|
||
}
|
||
}
|
||
}
|
||
if (zipit)
|
||
{
|
||
if (mime == "text/html") // Handig voor logfiles
|
||
filename = filename.replace(/\.html\.log$/, ".html");
|
||
zipfile(safefullpath, filename);
|
||
}
|
||
pcontentdp = pcontentdp || "attachment";
|
||
try
|
||
{
|
||
if (!fso.FileExists(safefullpath))
|
||
{
|
||
shared.simpel_page(L("lcl_flex_filenotfoundRO"));
|
||
}
|
||
Response.Clear;
|
||
Response.Buffer = false; // Geen buffering nodig. Bovendien kunnen we nu ook bestanden
|
||
// groter dan de ResponseBuffersize aan
|
||
// Known problems:
|
||
// "Plus+Quote'Spatie Rare<72>&.txt" non-ASCII karakters in pFilename worden wel eens onbedoeld herkend als UTF8
|
||
if (pcontentdp == "none")
|
||
{
|
||
if (!mime)
|
||
{
|
||
var extension = filename.split(".").pop().toLowerCase();
|
||
mime = S("flex_mimetypes")[extension] || "application/octet-stream";
|
||
}
|
||
}
|
||
else
|
||
Response.AddHeader("content-disposition", pcontentdp + "; filename= \"" + safeContentName(filename) + "\"");
|
||
|
||
Response.contenttype = mime;
|
||
|
||
// An ASP application uses internal server buffers when writing data to the client,
|
||
// irrespective of the value of Response.Buffer. As the application is writing data
|
||
// synchronously, the data buffer can be reused when the BinaryWrite function returns,
|
||
// while the server is writing the data asynchronously to the client. The server,
|
||
// in turn, makes a copy of the data into its internal buffers. As a result of
|
||
// this buffering, the ASP application should not try to send unreasonable amounts
|
||
// of data in a single BinaryWrite, but rather break it into fragments so as to
|
||
// avoid running out of buffer space. Should the buffer space be exceeded,
|
||
// ASP error 251, "response exceeds the buffer limit," will be returned.
|
||
// While the default maximum buffer size is 4MB, the server administrator may increase it.
|
||
// Dan lijkt me 1MB aardig
|
||
var CHUNKSIZE = 1024*1024;
|
||
|
||
// fso kan ook locked-for-write files (zoals Shibboleth logfiles) aan
|
||
// .log files veronderstellen we gewoon altijd ASCII
|
||
if (filename.match(/\.log$/i) && safefullpath.match(/shibboleth-sp/i))
|
||
{
|
||
Response.contenttype = "text/plain";
|
||
var f = fso.OpenTextFile(safefullpath, 1, false, -1); // ForReading/no create/Unicode(?)
|
||
while (!f.AtEndOfStream && Response.IsClientConnected)
|
||
{
|
||
Response.BinaryWrite(f.read(CHUNKSIZE));
|
||
}
|
||
Response.End;
|
||
}
|
||
// Anders gebruiken we toch maar liever de ADODB stream
|
||
var oStream = Server.CreateObject("ADODB.Stream");
|
||
oStream.Open;
|
||
oStream.Type = 1; // adTypeBinary
|
||
oStream.LoadFromFile(safe.UNC(safefullpath));
|
||
while (!oStream.EOS && Response.IsClientConnected)
|
||
{
|
||
Response.BinaryWrite(oStream.read(CHUNKSIZE));
|
||
}
|
||
Response.End();
|
||
}
|
||
catch(e)
|
||
{
|
||
__DoLog(Server.HTMLEncode(filename) + "\n" + e.description + "\n" + filePath, "#f00");
|
||
Response.Write(Server.HTMLEncode(filename) + "<p></p>" + e.description);
|
||
}
|
||
oStream = null;
|
||
}
|
||
|
||
// Zip een enkele file (met SLNKDWF.Zip)
|
||
function zipfile(fullpath, filename)
|
||
{
|
||
var oZIP = new ActiveXObject("SLNKDWF.Zip");
|
||
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
||
var temp = shared.tempFolder() + "/" + fso.GetTempName();
|
||
var iStream = new ActiveXObject("ADODB.Stream")
|
||
iStream.Type = 2; // Text
|
||
iStream.Open();
|
||
iStream.CharSet = "utf-8";
|
||
try
|
||
{
|
||
iStream.LoadFromFile(safe.UNC(fullpath));
|
||
}
|
||
catch (e)
|
||
{
|
||
shared.simpel_page("Error opening " + Server.HTMLEncode(fullpath) + "<p></p><em>"+e.description+"</em>");
|
||
}
|
||
oZIP.New(temp) //;; Helaas niet *naar* stream
|
||
oZIP.ZipFromStream(filename, iStream);
|
||
oZIP.Close();
|
||
iStream.Close()
|
||
var oStream = new ActiveXObject("ADODB.Stream");
|
||
oStream.Open;
|
||
oStream.Type = 1; // adTypeBinary
|
||
|
||
oStream.LoadFromFile(safe.UNC(temp));
|
||
oStream.Position = 0;
|
||
fso.DeleteFile(temp);
|
||
Response.clear;
|
||
Response.contenttype = 'application/zip';
|
||
Response.AddHeader("content-disposition", "attachment; filename= \"" + filename + ".zip\"");
|
||
Response.BinaryWrite(oStream.read(oStream.Size));
|
||
Response.End;
|
||
}
|
||
|
||
// Zip meerdere fac_bijlagen naar een enkel bestand (met Chilkat.zip)
|
||
// files mag zijn:
|
||
// -->A) Array van [fac_bijlagen_key] (dan komen ze allemaal in de root van de zipfile met hun eigen naam)
|
||
// -->B) Array van [{ fac_bijlagen_key: fac_bijlagen_key, zippath: "path-in-zip/name-in-zip" }]
|
||
function zipfacbijlagen(targetname, files)
|
||
{
|
||
var allfiles = [];
|
||
for (var i = 0; i < files.length; i++)
|
||
{
|
||
var file = files[i];
|
||
if (typeof file == "number")
|
||
{
|
||
var bijlagen_key = file;
|
||
var newfile = { "fac_bijlagen_key": file };
|
||
}
|
||
else
|
||
{
|
||
bijlagen_key = file.fac_bijlagen_key;
|
||
newfile = file;
|
||
}
|
||
|
||
var sql = "SELECT fac_bijlagen_filename, "
|
||
+ " fac_bijlagen_disk_directory, "
|
||
+ " disk_filename"
|
||
+ " FROM fac_v_bijlagen"
|
||
+ " WHERE fac_bijlagen_key = " + bijlagen_key;
|
||
var oRs = Oracle.Execute(sql);
|
||
|
||
newfile.filepath = S("flexfilespath") + "/" + oRs("fac_bijlagen_disk_directory").Value + "/" + oRs("disk_filename").Value;
|
||
oRs.Close()
|
||
allfiles.push(newfile);
|
||
}
|
||
return zipfiles(targetname, allfiles);
|
||
}
|
||
|
||
// Zip meerdere files naar een enkel bestand
|
||
// files moet zijn:
|
||
// -->C) Array van [{ filepath: webserver-path-to-source-file, zippath: "path-in-zip" }]
|
||
// de zippath is optioneel en moet dan path/to/filename.ext zijn (in de zip)
|
||
|
||
// Een bestaande zip wordt wel toegevoegd maar precies zoals wel willen:
|
||
// The default "no compress" extensions are: .zip, .gif, .jpg, .gz, .rar, .jar, .tgz, .bz2, .z, .rpm, .msi, .png
|
||
// Daar hoeven we ons dus niet druk over te maken
|
||
function zipfiles(targetname, files)
|
||
{
|
||
__Log(files);
|
||
var glob = new ActiveXObject("Chilkat_9_5_0.Global")
|
||
var success = glob.UnlockBundle(S("puo_chilkat_secret"));
|
||
if (success != 1)
|
||
throw { description: glob.LastErrorText };
|
||
|
||
var zip = new ActiveXObject("Chilkat_9_5_0.Zip");
|
||
|
||
var success = zip.NewZip("facilitor.zip"); // nog in memory
|
||
if (!success)
|
||
throw { description: zip.LastErrorText };
|
||
|
||
var uncompressed = 0;
|
||
for (var i = 0; i < files.length; i++)
|
||
{
|
||
var file = files[i];
|
||
if (!fso.FileExists(file.filepath))
|
||
{
|
||
__DoLog("Zipping: {0} not found".format(file.filepath));
|
||
continue;
|
||
}
|
||
var success = zip.AppendOneFileOrDir(file.filepath,0/*saveExtraPath*/);
|
||
if (!success)
|
||
throw { description: zip.LastErrorText };
|
||
var lastEntry = zip.GetEntryByIndex(zip.NumEntries - 1);
|
||
uncompressed += lastEntry.UncompressedLength;
|
||
if (file.zippath)
|
||
{
|
||
lastEntry.FileName = file.zippath;
|
||
}
|
||
}
|
||
if (uncompressed > 1024*1024*S("max_report_zip_uncompressed"))
|
||
{
|
||
shared.simpel_page(L("lcl_zip_bijlagen_exceeded").format(Math.round(uncompressed/1024/1024), files.length, S("max_report_zip_uncompressed")));
|
||
}
|
||
|
||
Response.Clear(); // Het zou trouwens raar zijn als hij niet clear was?
|
||
Response.Buffer = false; // Geen buffering nodig. Bovendien kunnen we nu ook bestanden
|
||
// groter dan de ResponseBuffersize aan
|
||
|
||
Response.contenttype = 'application/zip';
|
||
Response.AddHeader("content-disposition", "attachment; filename= \"" + targetname + "\"");
|
||
|
||
__Log("Zipping {0} uncompressed bytes".format(uncompressed));
|
||
// Echt helemaal streaming kan ik niet vinden
|
||
// Chilkat_9_5_0.StreamConnector schijnt alleen bij de .NET interface te bestaan
|
||
var bindata = new ActiveXObject("Chilkat_9_5_0.BinData");
|
||
var success = zip.WriteBd(bindata);
|
||
if (!success)
|
||
throw { description: zip.LastErrorText };
|
||
__Log("Zipfile is {0} bytes ({1}%)".format(bindata.numBytes, Math.round(100 * bindata.numBytes / uncompressed)));
|
||
var CHUNKSIZE = 1024*1024; // zelfs met Response.Buffer==false
|
||
for (var chunk = 0; chunk * CHUNKSIZE < bindata.numBytes; chunk++)
|
||
{
|
||
Response.BinaryWrite(bindata.GetBinaryChunk(chunk * CHUNKSIZE, CHUNKSIZE));
|
||
}
|
||
__Log("Written in {0} chunks".format(chunk - 1));
|
||
|
||
// var fac = new ActiveXObject("Chilkat_9_5_0.FileAccess");
|
||
// var success = fac.WriteEntireFile("c:\\temp\\test.zip",zipFileInMemory);
|
||
// if (!success)
|
||
// throw { description: fac.LastErrorText };
|
||
// }
|
||
}
|
||
%>
|