diff --git a/APPL/API/api_msgraphnotification.asp b/APPL/API/api_msgraphnotification.asp index 9c9b8f610e..133d0a2071 100644 --- a/APPL/API/api_msgraphnotification.asp +++ b/APPL/API/api_msgraphnotification.asp @@ -60,7 +60,11 @@ function _updateIncomingOutlookQueue(etag, CRUD) { // etag = 'The HTTP entity ta } incomingOutlookQueue[etag] = new Date().getTime() + 4 * 60 * 60 * 1000; // Expired in 4 uur } else if (CRUD == "D") { - delete incomingOutlookQueue[etag]; + // delete incomingOutlookQueue[etag]; + // ipv deleten laten we deze expiren over 3s zodat we reeds verwerkte notificaties niet nog eens gaan verwerken als het HTTP verkeer elkaar kruist + if (etag in incomingOutlookQueue) { + incomingOutlookQueue[etag] = new Date().getTime() + 3 * 1000; + } } Application(customerId + "_incomingOutlookQueue") = JSON.stringify(incomingOutlookQueue); Application.UnLock(); diff --git a/APPL/API2/model_visitors.inc b/APPL/API2/model_visitors.inc index c58da13373..422233ecce 100644 --- a/APPL/API2/model_visitors.inc +++ b/APPL/API2/model_visitors.inc @@ -148,7 +148,10 @@ function model_visitors() { if (jsondata.parking) { - var gebouwterreinkey = "NULL"; // doen we nog even niet aan? + var gebouwterreinkey = "NULL"; // We ondersteunen nog geen expliciete gebouwkeuze + var prkgebter = bez.onlyGebouw(olddata.appointment.id); + var gebouwterreinkey = prkgebter > 0? prkgebter: "null"; // de enige goede + var sql = "BEGIN bez.claim_parking(" + the_key + ", " + gebouwterreinkey + "); END;" Oracle.Execute(sql); } @@ -159,7 +162,7 @@ function model_visitors() var bezoeker = ""; if ("in" in jsondata) { - oRs = Oracle.Execute("SELECT bez_bezoekers_done, bez_afspraak_naam" + var oRs = Oracle.Execute("SELECT bez_bezoekers_done, bez_afspraak_naam" + " FROM bez_bezoekers" + " WHERE bez_bezoekers_key = " + the_key); olddone = oRs("bez_bezoekers_done").Value; @@ -189,7 +192,10 @@ function model_visitors() var result = generic_REST_POST(this)(params, jsondata, parent_key); /* new visitors */ if (jsondata.parking) { - var gebouwterreinkey = "NULL"; // doen we nog even niet aan? + var gebouwterreinkey = "NULL"; // We ondersteunen nog geen expliciete gebouwkeuze + var prkgebter = bez.onlyGebouw(parent_key); // parent_key is de afspraak_key + var gebouwterreinkey = prkgebter > 0? prkgebter: "null"; // de enige goede + var sql = "BEGIN bez.claim_parking(" + result.key + ", " + gebouwterreinkey + "); END;" Oracle.Execute(sql); } diff --git a/APPL/BEZ/bez.inc b/APPL/BEZ/bez.inc index a571f4216e..37a7c6e8b0 100644 --- a/APPL/BEZ/bez.inc +++ b/APPL/BEZ/bez.inc @@ -899,7 +899,37 @@ bez = actie_key = oRs("bez_actie_key").Value; oRs.Close() return actie_key; + }, + + // Bepaal eventueel het ene gebouw/terrein wat we mogen kiezen. bez.claim_park is nog niet slim genoeg + only_prkgebter: -2, + onlyGebouw: function _onlyGebouw(afspraak_key) + { + if (this.only_prkgebter > -2) + return this.only_prkgebter; + + var sql = "SELECT bez_afspraak_datum, bez_afspraak_eind, alg_locatie_key" + + " FROM bez_afspraak" + + " WHERE bez_afspraak_key = " + afspraak_key; + var oRs = Oracle.Execute(sql); + var gebtersql = bez.getgebouwterrein_sql(new Date(oRs("bez_afspraak_datum").value), new Date(oRs("bez_afspraak_eind").value), oRs("alg_locatie_key").value); + oRs.Close(); + var oRs = Oracle.Execute(gebtersql); + var aantal_gebter = 0; + this.only_prkgebter = -1; + while (!oRs.eof) + { + var alg_type = oRs("alg_type").value; + this.only_prkgebter = (alg_type == "R"? oRs("alg_gebouw_key").value : oRs("alg_terreinsector_key").value); + aantal_gebter++; + oRs.MoveNext(); + } + oRs.Close(); + if (aantal_gebter != 1) + this.only_prkgebter = -1; // Gebruiker heeft gekozen via Suggest en getFParamInt("gebouwkey" + bznum, "") wordt gebruikt. + return this.only_prkgebter; } + } %> \ No newline at end of file diff --git a/APPL/BEZ/bez_edit_bezoekers_save.inc b/APPL/BEZ/bez_edit_bezoekers_save.inc index 5e5a23733e..9bc08c141e 100644 --- a/APPL/BEZ/bez_edit_bezoekers_save.inc +++ b/APPL/BEZ/bez_edit_bezoekers_save.inc @@ -23,35 +23,6 @@ <% -// Bepaal eventueel het ene gebouw/terrein wat we mogen kiezen. bez.claim_park is nog niet slim genoeg -var only_prkgebter = -2; -function onlyGebouw(afspraak_key) -{ - if (only_prkgebter > -2) - return only_prkgebter; - - var sql = "SELECT bez_afspraak_datum, bez_afspraak_eind, alg_locatie_key" - + " FROM bez_afspraak" - + " WHERE bez_afspraak_key = " + afspraak_key; - var oRs = Oracle.Execute(sql); - var gebtersql = bez.getgebouwterrein_sql(new Date(oRs("bez_afspraak_datum").value), new Date(oRs("bez_afspraak_eind").value), oRs("alg_locatie_key").value); - oRs.Close(); - var oRs = Oracle.Execute(gebtersql); - var aantal_gebter = 0; - only_prkgebter = -1; - while (!oRs.eof) - { - var alg_type = oRs("alg_type").value; - only_prkgebter = (alg_type == "R"? oRs("alg_gebouw_key").value : oRs("alg_terreinsector_key").value); - aantal_gebter++; - oRs.MoveNext(); - } - oRs.Close(); - if (aantal_gebter != 1) - only_prkgebter = -1; // Gebruiker heeft gekozen via Suggest en getFParamInt("gebouwkey" + bznum, "") wordt gebruikt. - return only_prkgebter; -} - // Leest de bezoekers naam, bedrijfnaam, parkeerplaatswens en evt. badgenummer uit Request.Form // Verondersteld dat bez_afspraak_record al bestaat! of maak hem desnoods aan als afspraak_key==-1 // (dan zal rsv_ruimte_key een waarde hebben) @@ -482,7 +453,7 @@ function saveOneBezoeker(afspraak_key, rsv_ruimte_key, bznum, params) gebouwterreinkey = prkgebter; // de gekozen else { - var prkgebter = onlyGebouw(afspraak_key) + var prkgebter = bez.onlyGebouw(afspraak_key) gebouwterreinkey = prkgebter > 0? prkgebter: "null"; // de enige goede } sql = "BEGIN bez.claim_parking(" + bez_key + ", " + gebouwterreinkey + "); END;" diff --git a/APPL/FAC/Facilitor.asp b/APPL/FAC/Facilitor.asp index 046cbdd6c8..6478bf0084 100644 --- a/APPL/FAC/Facilitor.asp +++ b/APPL/FAC/Facilitor.asp @@ -489,7 +489,7 @@ if (Session("interface") == "touch") { %> <% if (!noTabs && S("menu_tab_toggles_portalmenu")==1) { - var menuitems = fillMenuArray(true); // portalOnly + var menuitems = fillMenuArray(1, { "portalOnly": true }); %> if (selectedTabId == 0) // Zelfservice? { diff --git a/APPL/FAC/fac_list.inc b/APPL/FAC/fac_list.inc index 0605425032..9a63a0dfd7 100644 --- a/APPL/FAC/fac_list.inc +++ b/APPL/FAC/fac_list.inc @@ -126,7 +126,8 @@ function fac_list_query (params) + " AND m.fac_activiteit_key IS NULL" + " AND (m.mld_workflowstep_key IS NULL OR mld_melding_start_key = mld_melding_key)" + " AND m.mld_melding_datum < SYSDATE + " + S("facilitiesfuture") // niet te toekomstig - + " AND ((m.mld_melding_status IN (1,5,6) AND COALESCE(fac.gettrackingdate('MLDAFM', mld_melding_key),fac.gettrackingdate('MLDREJ', mld_melding_key),mld_melding_einddatum) > SYSDATE - " + S("facilitiespast_mld") + ")" // niet te lang geleden klaar (gepland) + + " AND ((m.mld_melding_status IN (5,6) AND fac.gettrackingdate('MLDAFM', mld_melding_key) > SYSDATE - " + S("facilitiespast_mld") + ")" // niet te lang geleden klaar + + " OR (m.mld_melding_status = 1 AND fac.gettrackingdate('MLDREJ', mld_melding_key) > SYSDATE - " + S("facilitiespast_mld") + ")" // niet te lang geleden verworpen + " OR m.mld_melding_status NOT IN (1,5,6))" // of ongeacht alles nog niet klaar + lees_rechten_sql(lpkey, "sm.mld_ins_discipline_key", ["WEB_MLDBOF", "WEB_MLDFOF"]) ); diff --git a/APPL/MGT/mgt_generic.asp b/APPL/MGT/mgt_generic.asp index ba282445fb..ca3e9aab2e 100644 --- a/APPL/MGT/mgt_generic.asp +++ b/APPL/MGT/mgt_generic.asp @@ -117,7 +117,9 @@ "ins_alg_ruimte_key", "ins_alg_ruimte_type", "ins_alg_ruimte_type_org", - "ins_alg_ruimte_key_org"] + "ins_alg_ruimte_key_org", + "ins_deel_dwgx", + "ins_deel_dwgy"] }, "mld_melding_note": { "track": null, "fields": ["name", "mld_melding_note_flag"] diff --git a/APPL/PRS/prs_perslid_otp_new.asp b/APPL/PRS/prs_perslid_otp_new.asp index d582d4d921..11ae38cb15 100644 --- a/APPL/PRS/prs_perslid_otp_new.asp +++ b/APPL/PRS/prs_perslid_otp_new.asp @@ -19,8 +19,6 @@ var NO_OTP_OK = true; <% -var isExpired = getQParamInt("expired",0) == 1; // Ben ik hier naar toe gestuurd vanwege een expired wachtwoord? - // Dan redirecten we na afloop naar de voorpagina var theUser_key = getQParamInt("prs_key", user_key); if (theUser_key != user_key && !user.has("WEB_FACFAC")) abort_with_warning(L("lcl_no_auth")); @@ -58,17 +56,40 @@ Session("otp_secret_temp") = '1$30$6$0$' + newsecret; function otp_accept_callback(data) { - iface.button.enable("btn_accept_submit"); - if (data.success) + if (data.success) { FcltMgr.closeDetail(window, data); - window.top.location.href = "<%=safe.jsstring(rooturl + "/")%>"; + if (FcltMgr === FcltMgr.topmanager()) { + window.top.location.href = "<%=safe.jsstring(rooturl + "/")%>"; + } + } } + + function otp_cancel() { + FcltMgr.confirm("Deze code is nog niet gekoppeld, wilt u dit scherm toch afsluiten?", gen_cancel); + } + + $(() => { + iface.button.disable("btn_accept_submit"); + + $("#otpcode").on("input", event => { + if (event.currentTarget.value === "") { + iface.button.disable("btn_accept_submit"); + } else { + iface.button.enable("btn_accept_submit"); + } + }); + $("form[name=u2]").on("submit", event => { + event.preventDefault(); + $("#btn_accept_submit").trigger("click"); + }); + }); <% MODAL_START(); +%>
<% MODAL_BLOCK_START("", L("lcl_otp_authenticatie_activate"), {icon: "fa-shield-check"}); var secret32 = binary_to_base32(hex_to_binary(newsecret)); @@ -83,12 +104,13 @@ Session("otp_secret_temp") = '1$30$6$0$' + newsecret; MODAL_BLOCK_END(); var buttons = [ {title: L("lcl_submit"), icon: "fa-fclt-save", action: "otp_accept()", singlepress: true, id: "btn_accept_submit", importance: 1 }, - {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "gen_cancel()", importance: 3 } ]; + {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "otp_cancel()", importance: 3 } ]; SIMPLE_BLOCK_START(); - CreateButtons(buttons); + CreateButtons(buttons, { entersubmit: true }); SIMPLE_BLOCK_END(); IFACE.FORM_END(); +%>
<% MODAL_END(); %> diff --git a/APPL/SlnkDwf/Slnk2IMG.inc b/APPL/SlnkDwf/Slnk2IMG.inc index 6de88eafbf..bdfea71b3e 100644 --- a/APPL/SlnkDwf/Slnk2IMG.inc +++ b/APPL/SlnkDwf/Slnk2IMG.inc @@ -94,6 +94,7 @@ function SLNKDWF (myProps) // De DLL kent alleen (nog) versie A dus rekenen we B terug naar A // om dat te kunnen omrekenen hebben we DWGminX..DWGmaxY nodig // maar die krijgen we dan gelukkig aangereikt door de aanroeper + var paperRot = parseInt(_getParam("rotation",0),10); if (_getParam("maximize","0")=="1" || _getParam("DWGminX","")=="") { var ox = _getParam("offsetX",0); @@ -110,8 +111,6 @@ function SLNKDWF (myProps) var centerX = parseFloat(_getParam("centerX", (DWGminX + DWGmaxX)/2)); var centerY = parseFloat(_getParam("centerY", (DWGminY + DWGmaxY)/2)); - var paperRot = parseInt(_getParam("rotation",0),10); - // Bepaal schaal // var units = Math.max((DWGmaxX - DWGminX) / sizeX, (DWGmaxY - DWGminY) / sizeY) ; // DWG units per pixel bij schaal 1 diff --git a/UTILS/Exchange/ms_graph.js b/UTILS/Exchange/ms_graph.js index 067495c23e..3bee5e6bfc 100644 --- a/UTILS/Exchange/ms_graph.js +++ b/UTILS/Exchange/ms_graph.js @@ -210,7 +210,7 @@ function getCalendarEventByID(userPrincipalName, id) { var request = { "method": "GET", - "url": "https://graph.microsoft.com/v1.0/users/" + userPrincipalName + "/events/" + id + "url": "https://graph.microsoft.com/v1.0/users/" + encodeURIComponent(userPrincipalName) + "/events/" + id + "?$expand=singleValueExtendedProperties($filter=id eq '" + FCLT_KEY_PROP_ID_NAME + "')", "headers": { "Authorization": "Bearer " + token } } @@ -221,7 +221,7 @@ function getCalendarEventByID(userPrincipalName, id) function getCalendarEventByICalUId(userPrincipalName, iCalUId, isOccurrence) { // occurrences (en exceptions) zijn alleen via de calenderView beschikbaar, seriesMaster alleen via events (singleInstance via beiden) var endpoint = isOccurrence ? "calendarView" : "events"; - var url = "https://graph.microsoft.com/v1.0/users/" + userPrincipalName + "/" + endpoint + "?$filter=iCalUId eq '" + iCalUId + "'" + var url = "https://graph.microsoft.com/v1.0/users/" + encodeURIComponent(userPrincipalName) + "/" + endpoint + "?$filter=iCalUId eq '" + iCalUId + "'" + "&$expand=singleValueExtendedProperties($filter=id eq '" + FCLT_KEY_PROP_ID_NAME + "')"; if (isOccurrence) { // Dit endpoint heeft verplichte datum-parameters var calendarDates = getCalendarViewDates(userPrincipalName); @@ -244,7 +244,7 @@ function getCalendarEventByRsv(userPrincipalName, res_rsv_ruimte_key) { var request = { "method": "GET", - "url": "https://graph.microsoft.com/v1.0/users/" + userPrincipalName + "/events?" + "url": "https://graph.microsoft.com/v1.0/users/" + encodeURIComponent(userPrincipalName) + "/events?" + "$filter=singleValueExtendedProperties/Any(ep: ep/id eq '" + FCLT_KEY_PROP_ID_NAME + "' and ep/value eq '" + res_rsv_ruimte_key + "')", "headers": { "Authorization": "Bearer " + token } } @@ -276,7 +276,7 @@ function getCalendarItems(userPrincipalName, skiptoken, deltatoken) var request = { "method": "GET", - "url": "https://graph.microsoft.com/v1.0/users/" + userPrincipalName + "/calendarView/delta?" + parms, + "url": "https://graph.microsoft.com/v1.0/users/" + encodeURIComponent(userPrincipalName) + "/calendarView/delta?" + parms, "headers": { "Accept": "application/json", "Authorization": "Bearer " + token } } return doHTTP(request); @@ -684,7 +684,7 @@ function patchEventWithFcltKey(roomCalendarEvent, res_rsv_ruimte_key) { } var request = { "method": "PATCH", - "url": "https://graph.microsoft.com/v1.0/users/" + userPrincipalName + "/events/" + organisatorEvent.id, + "url": "https://graph.microsoft.com/v1.0/users/" + encodeURIComponent(userPrincipalName) + "/events/" + organisatorEvent.id, "body": JSON.stringify(data), "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + token } } @@ -776,7 +776,7 @@ function createSubscription(userPrincipalName, res_ruimte_key, notificationUrl, var data = { "changeType" : changeType, "notificationUrl" : notificationUrl + "&res_ruimte=" + res_ruimte_key + "&hookcreated=" + new Date().toISOString(), - "resource" : "/users/" + userPrincipalName + "/events", + "resource" : "/users/" + encodeURIComponent(userPrincipalName) + "/events", "clientState" : clientState, "expirationDateTime": expirationDate } @@ -810,7 +810,7 @@ function deleteSubscription(userPrincipalName) { var response = getSubscriptions(); var subscriptionList = []; if (response && response.value) { - var resource = "/users/" + userPrincipalName + "/events"; + var resource = "/users/" + encodeURIComponent(userPrincipalName) + "/events"; for (var i = 0; i < response.value.length; i++) { if (response.value[i].resource == resource) { // Filter op Extern ID subscriptionList.push(response.value[i].id); diff --git a/UTILS/Exchange/res_to_graph.js b/UTILS/Exchange/res_to_graph.js index fade818bca..0b82db60cb 100644 --- a/UTILS/Exchange/res_to_graph.js +++ b/UTILS/Exchange/res_to_graph.js @@ -301,12 +301,12 @@ function _resToGraph(oRs, CRUD, params) return false; } - var targetId = res_ruimte_extern_id; + var userPrincipalName = res_ruimte_extern_id; if (getMSGraphSyncLevel() & 4) { - targetId = host_mail; + userPrincipalName = host_mail; } - if (targetId === undefined || targetId === null) { + if (userPrincipalName === undefined || userPrincipalName === null) { __DoLog("Error: Kan geen gebruiker vinden namens wie we de reservering kunnen maken", "#FF0000"); return false; } @@ -407,7 +407,7 @@ function _resToGraph(oRs, CRUD, params) } } - var url = (params.batch ? "" : "https://graph.microsoft.com/v1.0") + "/users/" + targetId + "/events"; + var url = (params.batch ? "" : "https://graph.microsoft.com/v1.0") + "/users/" + encodeURIComponent(userPrincipalName) + "/events"; if (CRUD == "U" || CRUD == "D") url += "/" + organizerEventID; diff --git a/UTILS/gen_scheduler/gen_cleanup.js b/UTILS/gen_scheduler/gen_cleanup.js index adfa3608a6..96b2ab504f 100644 --- a/UTILS/gen_scheduler/gen_cleanup.js +++ b/UTILS/gen_scheduler/gen_cleanup.js @@ -223,7 +223,7 @@ function cleanup_temp() var thisFolder = fso.GetFolder(p_thisPath); if (p_folder) { - var regexp_f = new RegExp(p_folder); + var regexp_f = new RegExp(p_folder, "i"); var enumFolder = new Enumerator(thisFolder.SubFolders); for (; !enumFolder.atEnd(); enumFolder.moveNext()) { @@ -271,7 +271,7 @@ function cleanup_temp() //__Log("scanFile: "+p_thisPath); var fso = new ActiveXObject("Scripting.FileSystemObject"); var thisFolder = fso.GetFolder(p_thisPath); - var regexp_f = new RegExp(p_file_regexp); + var regexp_f = new RegExp(p_file_regexp, "i"); var enumFile = new Enumerator(thisFolder.Files); for (; !enumFile.atEnd(); enumFile.moveNext()) { @@ -301,7 +301,7 @@ function cleanup_temp() var tempFolder = "../../../temp/" + CustId + "/"; var cleanup_regexp_arr = [ { expr_folder: "", max_checklevel: 9, expr_file: "^(?:log_"+CustId+"_)\\S+\\\.html$", keep: "d30"} // Alle log_CustId_*.html-bestanden in TEMP\CustId van meer dan 30 dagen oud verwijderen. - , { expr_folder: "", max_checklevel: 9, expr_file: "\\S+\\\.(xml|jpg|json|pdf)$", keep: "d10"} // Alle *.xml-, *.jpg- en *.json-bestanden in TEMP\CustId van meer dan 10 dagen oud verwijderen. + , { expr_folder: "", max_checklevel: 9, expr_file: "\\S+\\\.(xml|jpg|json|pdf|eml|msg)$", keep: "d10"} // Alle *.xml-, *.jpg- en *.json-bestanden in TEMP\CustId van meer dan 10 dagen oud verwijderen. , { expr_folder: "", max_checklevel: 9, expr_file: "^(?:(putorders.*_"+CustId+"))\\S+\\\.log$", keep: "m1" } // Alle putordersI_CustId_*.log en putorders_CustId_*.log verwijderen van voor de 1-ste van 1 maand geleden. , { expr_folder: "^(putorders)$", max_checklevel: 9, expr_file: "^\\S+\.\\S+$", keep: "d30"} // Alles in TEMP\CustId\putorders van meer dan 30 dagen oud verwijderen. , { expr_folder: "^(ALG|BES|CNT|FIN|INS|MRK|MLD|RES|FAQ|.__NEW__)", max_checklevel: 2, expr_file: "^\\S+", keep: "d2" } // In mappen TEMP\CustId\Module\*__NEW__* bestanden die ouder zijn dan 2 dagen verwijderen, en als deze map dan leeg is de map ook verwijderen.