diff --git a/APPL/Shared/kenmerk_common.inc b/APPL/Shared/kenmerk_common.inc index 37b1176d42..213e2967b9 100644 --- a/APPL/Shared/kenmerk_common.inc +++ b/APPL/Shared/kenmerk_common.inc @@ -11,12 +11,11 @@ fetches all kenmerk-information The structure of tha SQL should match the predefined structure (column names) - TODO: HTML5-achtige zaken toevoegen - - required is ook een attribute met functionaliteit. Tot dusverre zetten we alleen reuired_class - moeten we behalve adt attr toevoegen ook iets met toggle en zo? + TODO: HTML5-achtige types toevoegen wanneer alle browsers het daar over eens zijn - FlexFiles.inc functie bepaalNiveau is altijd nodig dus FlexFiles.inc erbij */ + +// FlexFiles.inc functie bepaalNiveau is altijd nodig dus FlexFiles.inc erbij %> <% @@ -24,7 +23,7 @@ // meestal is die er toch al wel in het hoofdscherm dus voor het gemak doen // we het hier ook maar voor overige schermen. if (!this.JSON_Result) - FCLTHeader.Requires({plugins:["jQuery", "kenmerk"], js: ["jquery-ui.js", "date.js"]}) + FCLTHeader.Requires({plugins:["jQuery", "kenmerk"], js: ["jquery-ui.js", "date.js"]}) var requiredGroupUsed = new Array(); // Array zorgt voor eenmalige initiele aanroep van checkRequiredGroup(groep) per groep @@ -52,7 +51,7 @@ function parseDocumentPath(kenmerk_val) function kenmerk_write(s) { - Response.Write(s); + Response.Write(s); } // Tel/ zoek de bijlagen in een folder @@ -74,15 +73,15 @@ function BijlagenList(pModule, pNiveau, pKey, pKenmerk_key, otherKenmerk_path) __Log("Tellen in folder: " + vAttachPath); if (vAttachPath && fso.FolderExists(vAttachPath)) { - var fso, f, f1, fc, s; - fso = new ActiveXObject("Scripting.FileSystemObject"); - f = fso.GetFolder(vAttachPath); - fc = new Enumerator(f.files); + var fso, f, f1, fc, s; + fso = new ActiveXObject("Scripting.FileSystemObject"); + f = fso.GetFolder(vAttachPath); + fc = new Enumerator(f.files); - for (; !fc.atEnd(); fc.moveNext()) - { - lijst.push(fc.item().Name); - } + for (; !fc.atEnd(); fc.moveNext()) + { + lijst.push(fc.item().Name); + } } return lijst; } @@ -126,34 +125,33 @@ function BijlagenButton(pModule, pNiveau, pKey, tmpfolder, pKenmerk_key, } else { - if (otherKenmerk_path && lijst.length > 0) - var res = L("lcl_flex_autocopy"); - else // pf: op 1 regel tbv mijn syntaxhiliting - { - var res =" 0) + var res = L("lcl_flex_autocopy"); + else // pf: op 1 regel tbv mijn syntaxhiliting { - url += "&tmpfolder=" + tmpfolder; + var res ="" +" " @@ -244,7 +242,13 @@ function getDatatypeValue(table, column, checkval) // prs_key (of obsolete reqId) - key om bij defaultwaarde in ##PRS_PERSLID_KEY## te substitueren // fnpre en fnpost: functies die voor en na genereren worden aangroepen *mits er kenmerken zijn* // wfbuilder: toon ook flex-colname :f123 (voor workflow expression builder) +// confidential: als true moeten vertrouwelijke waarden gemaskeerd worden // } +// Qua confidential zijn er 2 aspecten: +// 1. zorgen dat de echt waarden niet getoond worden, dat kan lomp als allereerste actie +// maar ik verwacht dat men ooit bv wel de bijlagenaam wil tonen maar dan onklikbaar +// 2. zorgen dat de gemaskeerde waarden niet gesubmit worden, dan dus geen submitvelden opnemen +// // ================================================================================================ function listKenmerk(sql, module, key, props) { @@ -303,22 +307,23 @@ function listKenmerk(sql, module, key, props) } var predone = false; + var c_maskmarker = "" // prefix, niet klikbaar - var colCount = 0; // Even/oneven zodat we weten of we links of rechts zitten - var forceNewLine = false; // Bij labels en grote text velden - var val_seperator = ''; - var val_label = ''; - var idCounter = 1; // We maken alleen name/id-s voor de velden die ook echt bewerkt kunnen worden - var clabelCounter = 0; // Het aantal collapsable labels - var anyDate = false; - var anyTextarea = false; - var kenmerkidref = new Array(); // Bijhouden welk kenmerk welke id referentie mee heeft gekregen - var dpYearRanges = []; // te gebruiker jaren voor datepicker vastleggen. + var colCount = 0; // Even/oneven zodat we weten of we links of rechts zitten + var forceNewLine = false; // Bij labels en grote text velden + var val_seperator = ''; + var flexkenmerklabel = ''; + var idCounter = 1; // We maken alleen name/id-s voor de velden die ook echt bewerkt kunnen worden + var clabelCounter = 0; // Het aantal collapsable labels + var anyDate = false; + var anyTextarea = false; + var kenmerkidref = new Array(); // Bijhouden welk kenmerk welke id referentie mee heeft gekregen + var dpYearRanges = []; // te gebruiker jaren voor datepicker vastleggen. - var allCollapsable = false; // true bij eerste 'l'-label - var inMobileBlock = false; // true van begin mobile-collapse-content tot eind mobile-collapse-content + var allCollapsable = false; // true bij eerste 'l'-label + var inMobileBlock = false; // true van begin mobile-collapse-content tot eind mobile-collapse-content - var kenmerk_2col = (flexcolumns >= 2); // 2 kolommnen voor flexkenmerken als aantal kolommen ingevuld 2 of meer is. + var kenmerk_2col = (flexcolumns >= 2); // 2 kolommnen voor flexkenmerken als aantal kolommen ingevuld 2 of meer is. if (module == "INS" && niveau == "S") { // Sleutelmodule werkt met srtdeel_key @@ -331,13 +336,13 @@ function listKenmerk(sql, module, key, props) var oRs = Oracle.Execute(sql); while (!oRs.eof) { - var kdefault = oRs("kenmerk_default").Value; - if (kdefault && kdefault.match('##EXPR##') != null) - { - flexExprIncluded = true; - break; - } - oRs.MoveNext(); + var kdefault = oRs("kenmerk_default").Value; + if (kdefault && kdefault.match('##EXPR##') != null) + { + flexExprIncluded = true; + break; + } + oRs.MoveNext(); } oRs.Close(); @@ -347,12 +352,12 @@ function listKenmerk(sql, module, key, props) // ============================================================================================ // Doorloop alle flexkenmerken if (key < 0 && tmpfolder == "") - tmpfolder = shared.random(32); // voor als nog geen key en wel bijlagen + tmpfolder = shared.random(32); // voor als nog geen key en wel bijlagen var prssql = false; for (i = 1; !oRs.eof; i++) { - var val = null; + var flexkenmerkwaarde = null; val_seperator = ':'; var def_val = oRs("kenmerk_default").Value; var isExpression = false; @@ -360,7 +365,7 @@ function listKenmerk(sql, module, key, props) if (!kenmerk_search && !multiMode) { // In multiMode no filling of default values - val = oRs("kenmerk_waarde").value; + flexkenmerkwaarde = oRs("kenmerk_waarde").value; if (def_val && def_val.match('##EXPR##') != null) isExpression = true; @@ -368,24 +373,24 @@ function listKenmerk(sql, module, key, props) // For a new value, this default is used. It could be a primitive value (string, number or key) or // it is suggested to support (later) // a more sophisticated value, using ##asp-variable## and/or SQL:SELECT in the string. - if (val != null) - { //__Log("val:"+val); - if (val == def_val && val.match('##SQL##') != null) + if (flexkenmerkwaarde != null) + { //__Log("flexkenmerkwaarde:"+flexkenmerkwaarde); + if (flexkenmerkwaarde == def_val && flexkenmerkwaarde.match('##SQL##') != null) { - //__Log("val match"); + //__Log("flexkenmerkwaarde match"); prssql = true; - val = val.substr(val.indexOf('##SQL##') + 7); - var sql2 = val.replace("##PRS_PERSLID_KEY##", prs_key).replace("##PRS_CONTACTPERSOON_KEY##", cont_key); + flexkenmerkwaarde = flexkenmerkwaarde.substr(flexkenmerkwaarde.indexOf('##SQL##') + 7); + var sql2 = flexkenmerkwaarde.replace("##PRS_PERSLID_KEY##", prs_key).replace("##PRS_CONTACTPERSOON_KEY##", cont_key); oRsPerslid = Oracle.Execute(sql2); if (!oRsPerslid.eof) - val = oRsPerslid(0).value; + flexkenmerkwaarde = oRsPerslid(0).value; else - val = ''; + flexkenmerkwaarde = ''; oRsPerslid.Close(); } - else if (def_val && val == def_val && def_val.match('##EXPR##') != null) + else if (def_val && flexkenmerkwaarde == def_val && def_val.match('##EXPR##') != null) { - val = ""; + flexkenmerkwaarde = ""; } } } @@ -395,29 +400,32 @@ function listKenmerk(sql, module, key, props) var xx = props.defaults[oRs("kenmerk_omschrijving").value.toLowerCase()]; if (typeof xx != "undefined") { - val = xx; + flexkenmerkwaarde = xx; if (oRs("kenmerk_kenmerktype").value == "C" || oRs("kenmerk_kenmerktype").value == "N" || oRs("kenmerk_kenmerktype").value == "B") - val = val.substr(0, oRs("kenmerk_lengte").value); // Kap de waarde op de maximale lengte af + flexkenmerkwaarde = flexkenmerkwaarde.substr(0, oRs("kenmerk_lengte").value); // Kap de waarde op de maximale lengte af } } // De weer te geven waarde is nu bepaald - var kkey = oRs("kenmerk_key").value; - val_label = Server.HTMLEncode(oRs("kenmerk_omschrijving").value? oRs("kenmerk_omschrijving").value : ""); // Omschrijving kan leeg gelaten zijn - var ktype = oRs("kenmerk_kenmerktype").value; - var klen = oRs("kenmerk_lengte").value; + var kkey = oRs("kenmerk_key").value; + flexkenmerklabel= Server.HTMLEncode(oRs("kenmerk_omschrijving").value ? oRs("kenmerk_omschrijving").value : ""); // Omschrijving kan leeg gelaten zijn + var ktype = oRs("kenmerk_kenmerktype").value; + var klen = oRs("kenmerk_lengte").value; if (!klen) klen = 4000; - var kdec = oRs("kenmerk_dec").value; - var kmin = oRs("kenmerk_nmin").value; - var kmax = oRs("kenmerk_nmax").value; - var ksysteem= oRs("kenmerk_systeem").value; - var kvolgnr = "" + oRs("kenmerk_volgnr").value; - var kdim = oRs("kenmerk_dimensie").value; // beperkt bij uploads de extensie - var hint = oRs("kenmerk_hint").value; - var kregexp = oRs("kenmerk_regexp").value; + var kdec = oRs("kenmerk_dec").value; + var kmin = oRs("kenmerk_nmin").value; + var kmax = oRs("kenmerk_nmax").value; + var ksysteem = oRs("kenmerk_systeem").value; + var kvolgnr = "" + oRs("kenmerk_volgnr").value; + var kdim = oRs("kenmerk_dimensie").value; // beperkt bij uploads de extensie + var hint = oRs("kenmerk_hint").value; + var kregexp = oRs("kenmerk_regexp").value; var kdomein_key = oRs("kenmerkdomein_key").value; + var maskeren = confidential && ksysteem&4; + var maskmarker = maskeren ? c_maskmarker : ""; // misschien tijdelijk, een soort visuele assert: als je dit ziet met een echt waarde = fout + // if (hint == null) hint = ""; // PF vindt van niet if (def_val == null) def_val = " "; var required = oRs("kenmerk_verplicht").value; @@ -444,8 +452,8 @@ function listKenmerk(sql, module, key, props) continue; // Onzichtbaar } - //kenmerk_write( ""); - //kenmerk_write( ""); + //kenmerk_write( ""); + //kenmerk_write( ""); var readonlyfield = forceReadonly; // startwaarde if (!readonlyfield && !kenmerk_search && props.fnIsReadonly) // Zoeken is natuurlijk nooit readonly @@ -525,7 +533,7 @@ function listKenmerk(sql, module, key, props) // PF vraagt zich af: heeft dit ook gevolg voor print en excel? // En: voor type M is het altijd nu nog leeg, en die komen dus readonly nooit! // Voorlopig laat ik die dan altijd maar zien (TODO: evt niet als er 0 bestanden zijn) - if (readonlyfield && !isParent && ktype != 'L' && ktype != 'l' && ktype != 'M' && (!val || val=="") && + if (readonlyfield && !isParent && ktype != 'L' && ktype != 'l' && ktype != 'M' && (!flexkenmerkwaarde || flexkenmerkwaarde=="") && (!kenmerk_search && (ktype == 'C' || ktype == 'N' || ktype == 'B' || ktype == 'D' || ktype == 'R' || ktype == 'S')) ) // Als geavanceerd dan maakt het niet uit of het readonly is. Dan moet je het kenmerk gewoon tonen. { oRs.MoveNext(); @@ -557,7 +565,7 @@ function listKenmerk(sql, module, key, props) else forceNewLine = false; - if (kenmerk_search || val != null && val != "") + if (kenmerk_search || flexkenmerkwaarde != null && flexkenmerkwaarde != "") allCollapsable = false; // Eerst de simpele datatypes ('C', 'D' en 'N'). De complexere overrulen kv mogelijk later nog wel. @@ -578,7 +586,12 @@ function listKenmerk(sql, module, key, props) // - een R wordt een select // We doen eerst die uitzonderingen + + // ========================================================================================== + // ================================================================= // KENMERKTYPE C (Karakter) ================================================================= + // ================================================================= + // ========================================================================================== if (ktype == 'C') { if (flexExprIncluded && !isExpression) @@ -592,17 +605,15 @@ function listKenmerk(sql, module, key, props) if (klen > 50 && !kenmerk_search) { // Groot text veld wordt automatisch textarea - if (readonlyfield) + if (readonlyfield || maskeren) { if (formobile) { - kv = ""; + kv = ""; } else { - kv = "
" - + safe.html(val) - + "
"; + kv = "
" + safe.html(flexkenmerkwaarde) + "
"; } } else @@ -623,24 +634,24 @@ function listKenmerk(sql, module, key, props) + " rows=3 " + " maxlength='"+klen+"'" + " name='" + nameprefix + idCounter + "val' id='" + nameprefix + idCounter + "val' " - //+ "placeholder='"+val_label+"'" + //+ "placeholder='"+flexkenmerklabel+"'" + ">" - + safe.textarea(val) + + safe.textarea(flexkenmerkwaarde) + ""; } } else { // klein input veld - if (readonlyfield) + if (readonlyfield || maskeren) { if (formobile) { - kv = ""; + kv = ""; } else { kv = "" + safe.htmlattr(val) + ""; + + "'>" + safe.htmlattr(flexkenmerkwaarde) + ""; } } else @@ -659,8 +670,8 @@ function listKenmerk(sql, module, key, props) + "'" + (required ? " required='required' " : "") + (isExpression ? " readonly " : "") - //+ " placeholder='"+val_label+"'" - + " value='" + safe.htmlattr(val) + "'" + //+ " placeholder='"+flexkenmerklabel+"'" + + " value='" + safe.htmlattr(flexkenmerkwaarde) + "'" + " maxlength='" + klen + "'" + ">"; } @@ -676,7 +687,7 @@ function listKenmerk(sql, module, key, props) // Bijhouden van kenmerken. Later kan blijken dat ze parent kenmerken zijn. // Kenmerkkey alleen is niet uniek bij meerdere bezoekers of factuurregels. // Daarom nameprefix meenemen want die is per bezoeker of factuurregel wel uniek. - kenmerkidref[nameprefix + kkey] = new idref(nameprefix + idCounter, val); + kenmerkidref[nameprefix + kkey] = new idref(nameprefix + idCounter, flexkenmerkwaarde); var parentkenmerkid = ""; var parentkenmerk_key = -1; var parentkenmerkwaarde; @@ -716,8 +727,12 @@ function listKenmerk(sql, module, key, props) oRs2.close(); } - // KENMERKTYPE R/S (Referentie/Suggest) ===================================================== - if (ktype == 'R' || (readonlyfield && ktype == 'S')) // Referentie naar andere tabel (listboxje) + // ========================================================================================== + // ============================================ + // KENMERKTYPE R/S (Referentie/readonly Suggest) ============================================ + // ============================================ + // ========================================================================================== + if (ktype == "R" || ((readonlyfield || maskeren) && ktype == "S")) // Referentie naar andere tabel (listboxje) { var wheres = []; var dsql = "SELECT fac_kenmerkdomein_objectnaam" @@ -740,19 +755,19 @@ function listKenmerk(sql, module, key, props) wheres.push("fac_usrdata_parentkey IS NOT NULL"); } - if (val !== null && String(oRs_d("fac_kenmerkdomein_kolomnaam").value).match(/\_key$/i)) + if (flexkenmerkwaarde !== null && String(oRs_d("fac_kenmerkdomein_kolomnaam").value).match(/\_key$/i)) { - var vv = parseInt(val, 10); + var vv = parseInt(flexkenmerkwaarde, 10); if (isNaN(vv)) { // Kan gebeuren als van een text-kenmerk *achteraf* een referentiekenmerk wordt gemaakt // Ook: als je bij een referentie kenmerk een foutieve default-waarde (textueel) invult - __DoLog("Ongeldige referentie waarde {0} voor kolom {1}.{2}".format(val, + __DoLog("Ongeldige referentie waarde {0} voor kolom {1}.{2}".format(flexkenmerkwaarde, oRs_d("fac_kenmerkdomein_objectnaam").value, oRs_d("fac_kenmerkdomein_kolomnaam").value), "#ff0000"); - val = "-1"; + flexkenmerkwaarde = "-1"; } else - val = String(vv); + flexkenmerkwaarde = String(vv); } if (oRs_d("fac_kenmerkdomein_objectnaam").Value == "FAC_USRDATA" && oRs_d("fac_usrtab_key").Value) @@ -766,7 +781,7 @@ function listKenmerk(sql, module, key, props) + " WHERE fac_usrtab_key=" + oRs_d("fac_usrtab_key").Value + (!readonlyfield ? " AND fac_usrdata_verwijder IS NULL" - : " AND fac_usrdata_key = " + val) + : " AND fac_usrdata_key = " + flexkenmerkwaarde) + " AND (fac_usrdata_vervaldatum IS NULL OR fac_usrdata_vervaldatum > SYSDATE)" + " UNION " + "SELECT fac_usrdata_key" @@ -779,7 +794,7 @@ function listKenmerk(sql, module, key, props) + " , fac_usrdata_volgnr" + " FROM fac_usrdata " + " WHERE fac_usrtab_key = " + oRs_d("fac_usrtab_key").Value - + " AND fac_usrdata_key = " + val; + + " AND fac_usrdata_key = " + flexkenmerkwaarde; } else { @@ -792,7 +807,7 @@ function listKenmerk(sql, module, key, props) + " FROM " + oRs_d("fac_kenmerkdomein_objectnaam").Value + " WHERE (" + vervalkolom + " IS NULL OR " + vervalkolom + " > SYSDATE)" + (readonlyfield - ? " AND " + oRs_d("fac_kenmerkdomein_kolomnaam").Value + " = " + safe.quoted_sql(val) + ? " AND " + oRs_d("fac_kenmerkdomein_kolomnaam").Value + " = " + safe.quoted_sql(flexkenmerkwaarde) : "") + " UNION " + "SELECT " + oRs_d("fac_kenmerkdomein_kolomnaam").Value @@ -806,7 +821,7 @@ function listKenmerk(sql, module, key, props) : "NULL" ) + " x" + " FROM " + oRs_d("fac_kenmerkdomein_objectnaam").Value - + " WHERE " + oRs_d("fac_kenmerkdomein_kolomnaam").Value + " = " + safe.quoted_sql(val); + + " WHERE " + oRs_d("fac_kenmerkdomein_kolomnaam").Value + " = " + safe.quoted_sql(flexkenmerkwaarde); } @@ -834,7 +849,7 @@ function listKenmerk(sql, module, key, props) { if (readonlyfield) { - if (c0.value == val) + if (c0.value == flexkenmerkwaarde) { kvv = c1.value; break; // Rap klaar. Kan efficienter met een WHERE? @@ -845,7 +860,7 @@ function listKenmerk(sql, module, key, props) if (c1.value != null && String(c1.value.length) > maxLen) maxLen = String(c1.value).length; appender = ''; + + (c0.value == flexkenmerkwaarde?' selected' : '') + '>' + safe.html(c1.value) + ''; builder[builder.length] = appender; } oRs2.MoveNext(); @@ -855,37 +870,10 @@ function listKenmerk(sql, module, key, props) if (kvv == '') kvv = ' '; // Zodat readonly/print in ieder geval het label getoond wordt. oRs2.close(); - if (!readonlyfield) - { // is dus impliciet ook type R - if (flexExprIncluded && !isExpression) - onchangeExp = "calculateFlexExpressions(this" - + ", \"" + module + "\"" - + ", " + key - + ", \"" + (props.kenmerk_module || "") + "\"" - + ", \"" + nameprefix + "\"" - + ", \"" + extraserie + "\"" - + ");"; - kv = ""; - if (required) // wrapper voor rode streepje, IE-only. Wat vind je Jos (ik vind het te lelijk in chrome/safari) - kv = "" + kv + ""; - } - else + if (readonlyfield || maskeren) { var showdetail = (formobile ? "" : (xmlnode? ' details' : '') ); - var clickdetail = (formobile ? "" : (xmlnode? ' onClick="xmlNodeDetails(' + val + ', \'' + xmlnode + '\')"' : '') ); + var clickdetail = (formobile ? "" : (xmlnode? ' onClick="xmlNodeDetails(' + flexkenmerkwaarde + ', \'' + xmlnode + '\')"' : '') ); if (ktype == "R") kv = ' 1 + ? " onChange='checkRequiredGroup(\"" + required_group + "\");" + onchangeExp + "'" + : (flexExprIncluded && !isExpression? " onChange='" + onchangeExp + "'" : "")) + + ">" + + "" + + kvv + + ""; + } + + if (!readonlyfield && parentkenmerkid != "" && !maskeren) { %> -<% } + <% + } } + // ========================================================================================== + // =================================================================== // KENMERKTYPE F/E (File) =================================================================== + // =================================================================== + // ========================================================================================== var lijst = []; // mobile doen we heel anders, tenzij het signature is. Die doen we nog old-school if (formobile && kdim != 'xxx' && (ktype == 'F' || ktype == 'E' || ktype == 'M')) @@ -996,9 +1015,9 @@ function listKenmerk(sql, module, key, props) var fld = nameprefix + idCounter + "val"; // Er is redundantie: de bestandsnaam zit in de database en staat in de folder // door bijvoorbeeld niet op Ok te drukken na vervanging van het bestand - // kan er inconstistentie ontstaan. Lastig tegen te gaan dus maar detecteren en melden. + // kan er inconsistentie ontstaan. Lastig tegen te gaan dus maar detecteren en melden. var missing = false; - if (val && ktype != 'M') + if (flexkenmerkwaarde && ktype != 'M') { var fso = new ActiveXObject("Scripting.FileSystemObject"); if (otherPath) @@ -1008,9 +1027,9 @@ function listKenmerk(sql, module, key, props) // JGL: Zou dit niet moeten/ kunnen via bijvoorbeeld iets als flexProps(module, key, String(kkey), niveau).AttachPath + "/"; var vAttachPath = S("flexFilesPath") + "/" + module + "/" + subfolderKey(bepaalNiveau(module, niveau), key) + "/" + kkey; } - missing = !fso.FileExists(vAttachPath + "/" + val); + missing = !fso.FileExists(vAttachPath + "/" + flexkenmerkwaarde); if (missing) - __Log(vAttachPath + "/" + val + " is missing"); + __Log(vAttachPath + "/" + flexkenmerkwaarde + " is missing"); } // Mobile heeft een compleet eigen BijlagenForm.asp @@ -1060,7 +1079,7 @@ function listKenmerk(sql, module, key, props) + ", $('#" + fld + "')[0]" + ")"; - if (!readonlyfield || val) + if (!readonlyfield || flexkenmerkwaarde) { kv = " 1 ? " onChange='checkRequiredGroup(\"" + required_group + "\")'" : "") - //+ " placeholder='"+val_label+"'" - + " value='" + safe.htmlattr(val) + "' " - + (!val?" style=display:none":""); + //+ " placeholder='"+flexkenmerklabel+"'" + + " value='" + safe.htmlattr(flexkenmerkwaarde) + "' " + + (!flexkenmerkwaarde?" style=display:none":""); // + ">"; //komt later var kvClick=""; if (otherPath) // Even niet klikbaar kvClick = " title='" + L("lcl_flex_autocopy") +"' "; - else if (readonlyfield && val && !missing) // rechtstreeks openen + else if (readonlyfield && flexkenmerkwaarde && !missing && !maskeren) // rechtstreeks openen { if (kdim == 'xxx') - var fnclick = "parent.FcltMgr.windowopen('" + protectQS.create(OpenFlexFile(module, niveau, key, kkey, val, { mime_type: "image/png", contentdp: "inline" })) + "')"; + var fnclick = "parent.FcltMgr.windowopen('" + protectQS.create(OpenFlexFile(module, niveau, key, kkey, flexkenmerkwaarde, { mime_type: "image/png", contentdp: "inline" })) + "')"; else - var fnclick = "parent.FcltMgr.windowopen('" + protectQS.create(OpenFlexFile(module, niveau, key, kkey, val)) + "', 'File')"; + var fnclick = "parent.FcltMgr.windowopen('" + protectQS.create(OpenFlexFile(module, niveau, key, kkey, flexkenmerkwaarde)) + "', 'File')"; kvClick = " onclick='" + safe.htmlattr(fnclick) + "'"; } - else if (readonlyfield && val && missing) // Waarschuwen + else if (readonlyfield && flexkenmerkwaarde && missing) // Waarschuwen kvClick = " title='" + safe.htmlattr(L("lcl_flex_filenotfoundRO")) + "'"; else { @@ -1112,22 +1131,26 @@ function listKenmerk(sql, module, key, props) { kv += ""; } if (kdim == 'xxx') { - if (!missing && val) - kv += ""; + if (!missing && flexkenmerkwaarde) + kv += ""; else kv += ""; } } + // ========================================================================================== + // ====================================================================== // KENMERKTYPE M (Map) ====================================================================== + // ====================================================================== + // ========================================================================================== else if (ktype == 'M') // Map met bestanden is altijd heel simpel { var requiredfield = (required ? required_class : ""); @@ -1187,84 +1210,91 @@ function listKenmerk(sql, module, key, props) + "' " : "") + (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")' " : "") - + (readonlyfield? " readonly tabindex=-1 " - : " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val' "); + + (readonlyfield || maskeren + ? " readonly tabindex=-1 " + : " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val' "); } // // LET OP: kv is nu een "OPEN" variabele, die nog minstens een sluithaak nodig heeft! // + // ========================================================================================== + // =============================================== // KENMERKTYPE N (Numeriek) of B (Berekening) =============================================== - if (ktype == 'N' || ktype == 'B') - { // Checkbox of numeriek/berekening input veld. + // =============================================== + // ========================================================================================== + if (ktype == "N" || ktype == "B") + { + // Checkbox of numeriek/berekening input veld. if (makeCheckbox) // deze doen we compleet hier { - if (readonlyfield || ktype == 'B') // Berekening input veld is altijd readonly. + if (readonlyfield || ktype == "B" || maskeren) // Berekening input veld is altijd readonly. { - if (formobile) - { - kv = ""; - } - else - { - kv = "" + (val == 1? L("lcl_check_1") : L("lcl_check_0")) + ""; - } + if (formobile) + { + kv = ""; + } + else + { + kv = "" + (flexkenmerkwaarde == 1? L("lcl_check_1") : L("lcl_check_0")) + ""; + } } else - kv = "" - + ""; + { + kv = "" + + ""; + } } else - kv += " class='" - + (kenmerk_search - ? "fldSflexN " - : "fldflexN ") + { + // geen checkbox (noot PF: de readonly hiervan wordt kennelijk elders behandeld) + kv += " class='" + + (kenmerk_search ? "fldSflexN " : "fldflexN ") + (required ? required_class : "") + (kdec > 0 ? " float " : " number ") + (isExpression? " expression " : "") + "'" - + (required ? " required='required' " : "") - + (isExpression ? " readonly " : "") - //+ " placeholder='"+val_label+"'" - + " value='" + (kdec > 0 && val? safe.displayfloat(parseFloat(val), kdec) : safe.html(val)) + "'" - + " maxlength='" + ((kmin >= 0? 0 : 1) + (kdec > 0? 1 : 0) + klen) + "'" - + ">"; + + (required ? " required='required' " : "") + + (isExpression ? " readonly " : "") + + " value='" + (kdec > 0 && flexkenmerkwaarde? safe.displayfloat(parseFloat(flexkenmerkwaarde), kdec) : safe.html(flexkenmerkwaarde)) + "'" + + " maxlength='" + ((kmin >= 0? 0 : 1) + (kdec > 0? 1 : 0) + klen) + "'" + + ">"; + } } - // KENMERKTYPE D (Date) ================================================================= + // ========================================================================================== + // ===================================================================== + // KENMERKTYPE D (Date) ===================================================================== + // ===================================================================== + // ========================================================================================== if (ktype == 'D') { - kv += " class='" - + (kenmerk_search - ? "fldSflexD " - : "fldflexD ") - + (required ? required_class : "") - + (isExpression? " expression " : "") - + "'" - + (required ? " required='required' " : "") - + (isExpression? " readonly " : "") - + " value='" + safe.htmlattr(val) + "'" - + ">"; + kv += " class='" + + (kenmerk_search ? "fldSflexD " : "fldflexD ") + + (required ? required_class : "") + + (isExpression? " expression " : "") + + "'" + + (required ? " required='required' " : "") + + (isExpression? " readonly " : "") + + " value='" + safe.htmlattr(flexkenmerkwaarde) + "'" + + ">"; - if (!readonlyfield && !isExpression) - kv += ""; + if (!readonlyfield && !isExpression && !maskeren) + kv += ""; // Als er voor een datumveld geen kmin en kmax is ingevuld dan is de yearRange default -10 tot +10 jaar vanaf geselecteerd jaar. // Is een van beiden ingevuld dan wordt de andere op 10 jaar vanaf geselecteerde jaar gezet (deze verschuift met selectie). // Een opgegeven waarde is het aantal jaren voor of na het huidige jaar (waarde < 1000), of een jaartal (waarde > 1000). @@ -1279,28 +1309,33 @@ function listKenmerk(sql, module, key, props) } + // ========================================================================================== + // ========================================================= // KENMERKTYPE X (Bestandsnaam/url) ========================================================= + // ========================================================= + // ========================================================================================== if (ktype == 'X') { + var viewpath; if (S("flex_X_is_URL")==0) - var viewpath = S("image_path_virtual") + val; + viewpath = S("image_path_virtual") + flexkenmerkwaarde; else - var viewpath = val; + viewpath = flexkenmerkwaarde; - if (readonlyfield) // Je mag er wel op klikken - if (val) - kv = ''; + if (readonlyfield || maskeren) // Je mag er wel op klikken + if (flexkenmerkwaarde) + kv = ''; else kv = ""; - else if (val) // Tekstveld met 'view' button er achter plakken + else if (flexkenmerkwaarde) // Tekstveld met 'view' button er achter plakken kv += " class='fldflexX" + (required ? required_class : "") + "'" - + " value='" + safe.htmlattr(val) + "'" + + " value='" + safe.htmlattr(flexkenmerkwaarde) + "'" + (required ? " required='required' " : "") + ">"; - else if (!kenmerk_search) // !val // Browse button for new er achter plakken + else if (!kenmerk_search) // !flexkenmerkwaarde // Browse button for new er achter plakken kv = ""; else kv += ">"; } + // ========================================================================================== + // ================================================================== // KENMERKTYPE S (Suggest) ================================================================== - // readonlyfield is bij "R" al meegenomen - if (ktype == 'S' && !readonlyfield) // Referentie naar andere tabel (suggest box) + // ================================================================== + // ========================================================================================== + // readonlyfield/maskeren is bij "R" al meegenomen + if (ktype == "S" && !readonlyfield && !maskeren) // Referentie naar andere tabel (suggest box) { // Huidige waarde opzoeken var dsql = "SELECT fac_kenmerkdomein_objectnaam " @@ -1339,7 +1378,7 @@ function listKenmerk(sql, module, key, props) var oRs_d = Oracle.Execute(dsql); var vervalkolom = oRs_d("fac_kenmerkdomein_verval").Value; - var suggestval = getDatatypeValue(oRs_d("fac_kenmerkdomein_objectnaam").value, oRs_d("fac_kenmerkdomein_kolomnaam").value, val); + var suggestval = getDatatypeValue(oRs_d("fac_kenmerkdomein_objectnaam").value, oRs_d("fac_kenmerkdomein_kolomnaam").value, flexkenmerkwaarde); if (oRs_d("fac_kenmerkdomein_objectnaam").value == "FAC_USRDATA" && oRs_d("fac_usrtab_key").value) { var fsql = "SELECT fac_usrdata_key" @@ -1412,7 +1451,7 @@ function listKenmerk(sql, module, key, props) Suggest<%=nameprefix + idCounter%> = new Suggest({objectName: "Suggest<%=nameprefix + idCounter%>", queryField: $("#Suggest<%=nameprefix + idCounter%>_show")[0], queryUrl: rooturl + "/appl/shared/Suggest/SuggestKenmerkDomein.asp?kenmerkdomein_key=<%=kdomein_key%>", - initKey: '<%=val%>', + initKey: '<%=flexkenmerkwaarde%>', keyField: $("#<%=nameprefix + idCounter%>val")[0], fieldReadonly: <%=readonlyfield? "true" : "false"%> <% if (parentkenmerkid != "") @@ -1447,13 +1486,17 @@ function listKenmerk(sql, module, key, props) + ""; } + // ========================================================================================== + // ==================================================================== // KENMERKTYPE L (Label) ==================================================================== - if (ktype == 'L' || ktype == 'l') + // ==================================================================== + // ========================================================================================== + if (ktype == "L" || ktype == "l") { // Label line - allCollapsable = (ktype == 'l'); // opnieuw beginnen met zoeken - inMobileBlock = (formobile && ktype == 'l'); // op dit moment zitten we in een mobile-collapse-content-block + allCollapsable = (ktype == "l"); // opnieuw beginnen met zoeken + inMobileBlock = (formobile && ktype == "l"); // op dit moment zitten we in een mobile-collapse-content-block - val_label = oRs("kenmerk_omschrijving").Value; // was: 1 + flexkenmerklabel = oRs("kenmerk_omschrijving").Value; // was: 1 clabelCounter++; val_seperator = ''; kv = def_val; @@ -1461,7 +1504,7 @@ function listKenmerk(sql, module, key, props) } // ========================================================================================== - // Alles bepaald, nu positioneren enzo + // Alles bepaald, te tonen waarde/veld in kv, nu positioneren enzo in kvhtml // ========================================================================================== if (!predone && props.fnpre && (kv || (ktype == 'L' || ktype == 'l'))) { @@ -1484,102 +1527,111 @@ function listKenmerk(sql, module, key, props) continue; // Teller is wel opgehoogd: volgende komt vanzelf op nieuwe regel } - if (kv != '') - { - // Schrijf eventueel een tabelregel begin - if (((colCount&1) || forceNewLine || !kenmerk_2col) && !formobile && !notr) - kenmerk_write(''); // Nu altijd zichtbaar in popup dmodal scherm - // Schrijf een tabelcell met het label + flexkenmerklabel = maskmarker + " " + flexkenmerklabel; - if (makeCheckbox && formobile) // Zie commentaar iets verderop - props.label_colspan = 2; - - if (props.wfbuilder) // Workflow Expression Builder - kenmerk_write(":flex{0}".format(kkey)); - - if (!formobile && !nolabel) - kenmerk_write('\n '); - - if (!nolabel) - kenmerk_write((formobile && ktype == 'l'? '

' : '') - + '\n '+(formobile && ktype == 'l' ? '

' : '')); - - // labelwaardes (vaak invulinstructie) in apart te stylen span - if (formobile && (ktype == 'L' || ktype == 'l') && kv) { - kv = '\n ' + kv + ''; - } - - // Bij mobile willen we de checkbox en zijn label in dezelfde ene TD hebben met colspan=2. - // jQuery voegt ze namelijk samen tot een enkel interface element en dat past niet altijd - // in de ene TD anders - if ((!makeCheckbox || !formobile) && !formobile) + var kvhtml = ""; // hierin bouwen we de html op + if (kv != '') { + // Schrijf eventueel een tabelregel begin + if (((colCount&1) || forceNewLine || !kenmerk_2col) && !formobile && !notr) + kvhtml += (''); // Nu altijd zichtbaar in popup dmodal scherm + // Schrijf een tabelcell met het label + + if (makeCheckbox && formobile) // Zie commentaar iets verderop + props.label_colspan = 2; + + if (props.wfbuilder) // Workflow Expression Builder + kvhtml += (":flex{0}".format(kkey)); + + if (!formobile && !nolabel) + kvhtml += ('\n '); + if (!nolabel) - kenmerk_write(''); - kenmerk_write('\n

' : '') + + '\n '+(formobile && ktype == 'l' ? '

' : '')); - if (kenmerk_search && (ktype != 'L' && ktype != 'l')) - { - kenmerk_write('>'); - kenmerk_write(Operand(idCounter)); + // labelwaardes (vaak invulinstructie) in apart te stylen span + if (formobile && (ktype == 'L' || ktype == 'l') && kv) { + kvhtml += '\n ' + kv + ''; } - else + + // Bij mobile willen we de checkbox en zijn label in dezelfde ene TD hebben met colspan=2. + // jQuery voegt ze namelijk samen tot een enkel interface element en dat past niet altijd + // in de ene TD anders + if ((!makeCheckbox || !formobile) && !formobile) { - if ( ktype == 'L' || ktype == 'l' ) - if (typeof kenmerk_extraTD != "undefined" && kenmerk_extraTD) - kenmerk_write(' colspan=4>'); // MLD_OPDR heeft TD-tje extra + if (!nolabel) + kvhtml += (''); + kvhtml += ('\n '); + kvhtml += (Operand(idCounter)); + } else - kenmerk_write(' colspan=3>'); - else - kenmerk_write(">"); - } + { + if ( ktype == 'L' || ktype == 'l' ) + if (typeof kenmerk_extraTD != "undefined" && kenmerk_extraTD) + kvhtml += (' colspan=4>'); // MLD_OPDR heeft TD-tje extra + else + kvhtml += (' colspan=3>'); + else + kvhtml += (">"); + } - if (nolabel) - kenmerk_write('\n '); + if (nolabel) + kvhtml += ('\n '); } - // Schrijf vervolgens nu het echte veld - if (confidential && ksysteem&4) - kenmerk_write(" "+L("lcl_confidential")+""); + // Nu het eerder bepaalde waarde veld, zo nodig onderdrukt bij confidential-situatie + if (maskeren) { + // nu verstop ik alles wat we hierboven bepaald hebben. Dat is wat te lomp, want nu raak je alles kwijt bij _save. + kvhtml += (""+ /* maskmarker + */ L("lcl_confidential")+""); + } else - kenmerk_write(kv); + kvhtml += kv; if (typeof kenmerk_extraTD != "undefined" && kenmerk_extraTD && !formobile) - kenmerk_write('\n ') // Extra leeg celletje voor layout MLD_OPDR + kvhtml += '\n '; // Extra leeg celletje voor layout MLD_OPDR - if (val && forceReadonly && ktype != "M" && ktype != 'L' && ktype != 'l') - { // hidden veld met de *echt* waardes zodat ze wel worden opgeslagen - kenmerk_write("\n ") + if (!maskeren && flexkenmerkwaarde && forceReadonly && ktype != "M" && ktype != "L" && ktype != "l") // check mbt confidential + { + // hidden veld met de *echte* waardes zodat ze wel worden opgeslagen + kvhtml += "\n "; } - if ((kenmerk_search || !readonlyfield || (val && forceReadonly)) && ktype != "M" && ktype != 'L' && ktype != 'l') - { // Alleen dan hidden name-velden er bij -%> - -<% if (isExpression) - { %> - -<% } %> -<% } + if (!maskeren && (kenmerk_search || !readonlyfield || (flexkenmerkwaarde && forceReadonly)) && ktype != "M" && ktype != "L" && ktype != "l") + { + // Alleen dan hidden name-velden er bij + kvhtml += ""; + kvhtml += ""; + if (isExpression) + { + kvhtml += ""; + } + } idCounter++; // Nu ophogen if (!formobile) { - kenmerk_write(''); - if (!((colCount&1) && kenmerk_2col) && !notr) - kenmerk_write('\n'); + kvhtml += ''; + if (!((colCount&1) && kenmerk_2col) && !notr) + kvhtml += '\n'; } + // En hier schrijven we het hele veld dan naar de pagina + kenmerk_write (kvhtml); } oRs.MoveNext(); // Collapse code er achteraan als de *volgende* een ander label is @@ -1598,6 +1650,10 @@ function listKenmerk(sql, module, key, props) } } oRs.close(); + + // All fields are done here + + if (inMobileBlock || (!formobile && allCollapsable)) // allerlaatste ook nog { if (formobile) @@ -1848,24 +1904,27 @@ function CopyFlexFolders(oldbasepath, newbasepath, flexsql) // ================================================================================================ // Save de kenmerken die we met listKenmerk hebben aangemaakt -// Verondersteld POST formulier (we doen een Request.Form) -// kenmerkTable : "mld_kenmerkopdr" -// kenmerkParentKey: "mld_opdr_key" -// kenmerkWaarde : "mld_kenmerkopdr_waarde" -// kenmerkKey : "mld_kenmerk_key" +// +// kenmerkTable : "mld_kenmerkopdr" +// kenmerkParentKey : "mld_opdr_key" +// kenmerkWaarde : "mld_kenmerkopdr_waarde" +// kenmerkKey : "mld_kenmerk_key" // currentKenmerkenSQL : Voor maken array met kenmerk_keys die voor dit object al in de database waren // als tracking dan moet ook tweede parameter de oude waarde opleveren -// RequestQ : true voor QueryString, false voor Form -// moduleName : optional "ALG_ONRGOED_NIVEAU" -// moduleVal : optional "R" -// isNew : optional, true als het object nieuw is -// flexPath : die gebruiken we dan om tijdelijke folder te hernoemen bijv. "ALG/R" -// tracking : optional, dan tracken we als !isNew -// - allKenmerkenSQL is dan ook verplicht met kenmerk_omschrijving en -// srtkenmerk_key (zie melding_save) -// - module is dan ook verplicht +// RequestQ : true voor QueryString, false voor Form +// moduleName : optional "ALG_ONRGOED_NIVEAU" +// moduleVal : optional "R" +// isNew : optional, true als het object nieuw is +// flexPath : die gebruiken we dan om tijdelijke folder te hernoemen bijv. "ALG/R" +// tracking : optional, dan tracken we als !isNew +// - allKenmerkenSQL is dan ook verplicht met kenmerk_omschrijving en +// srtkenmerk_key (zie melding_save) +// - module is dan ook verplicht +// // In listKenmerk hebben we al gezorgd dat er alleen waarden gesubmit worden van velden die we -// ook echt mochten wijzigen. kkn en kvn zullen er dan ook altijd beide zijn +// ook echt mochten wijzigen. kk en kv zullen er dan ook altijd beide zijn +// Nieuw is dat we af moeten blijven van confidential kenmerken, dat zijn kenmerken die +// vertrouwelijk zijn (systeem&4) gedefinieerd en voor deze user afgeschermd zijn (confidential) // ================================================================================================ // Let op: de voorkeur is het gebruik van saveFlexKenmerken(parentKey, params) // voor backward compatibilitiet mag je het nog uitschrijven.