Files
Facilitor/APPL/API/Exchange/get_exchange_info.asp
Koen Reefman 2c1b8c7183 FCLT#82174 Foutmelding uitgebreid
svn path=/Website/trunk/; revision=67784
2025-01-29 13:04:02 +00:00

244 lines
9.5 KiB
Plaintext

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: get_exchange_info.asp
Description: Haalt events uit Exchange op en geeft deze terug
Parameters:
Context:
Note:
*/
var JSON_Result = true;
%>
<!-- #include file="../../Shared/common.inc" -->
<%
Session.Codepage = 65001; // We doen *uitsluitend* utf-8
Response.Charset = "UTF-8";
protectRequest.validateToken();
user.checkAutorisation("WEB_FACTAB");
function early_exit(err) {
result.success = false;
result.warning = err;
ASPPAGE_END();
Response.Write(JSON.stringify(result));
Response.End;
}
function verifyMSGraphResult(response) {
if (response === false || response === null) {
early_exit("MS Graph [Generic Error] - Zie Logging voor details");
}
}
// Minimaliseer het resultaat door alleen zeer relevante velden over te nemen
function strip(result) {
function _minify(event) {
return {
"createdDateTime": event.createdDateTime,
"id": event.id,
"iCalUId": event.iCalUId,
"subject": event.subject,
"isCancelled": event.isCancelled,
"sensitivity": event.sensitivity,
"isOnlineMeeting": event.isOnlineMeeting,
"responseStatus": event.responseStatus,
"start": event.start,
"end": event.end,
// "locations": event.locations,
"attendees": event.attendees
}
}
if (result.host) {
if (result.host instanceof Array) {
for (var i = 0; i < result.host.length; i++) {
result.host[i] = _minify(result.host[i]);
}
} else {
result.host = _minify(result.host);
}
}
if (result.room) {
if (result.room instanceof Array) {
for (var i = 0; i < result.room.length; i++) {
result.room[i] = _minify(result.room[i]);
}
} else {
result.room = _minify(result.room);
}
}
return result;
}
// Polyfill
if (!Date.prototype.toISOString) {
Date.prototype.toISOString = function () {
function pad(n) { return n < 10 ? '0' + n : n }
return this.getUTCFullYear() + '-'
+ pad(this.getUTCMonth() + 1) + '-'
+ pad(this.getUTCDate()) + 'T'
+ pad(this.getUTCHours()) + ':'
+ pad(this.getUTCMinutes()) + ':'
+ pad(this.getUTCSeconds()) + 'Z';
};
}
var result = {
info: []
};
if (!(S("msgraph_sync_level") > 0)) {
result.info = ["S(\"msgraph_sync_level\") staat op '0'"];
}
// Initialize hook
var hook = hookfunc.gethook("UTILS/Exchange/res_to_graph.wsc");
var DEZE = this;
try {
var init = hook.initialize({
DEZE: DEZE,
custabspath: Server.MapPath(custpath)
});
if (init === null) { // Is alleen null als de exchange.config ontbreekt
early_exit("Geen exchange.config aangetroffen");
}
} catch (e) {
early_exit("Hook error: " + e.description);
}
var host_id = null;
var room_id = null;
var host_email = null;
var room_email = null;
var res_rsv_ruimte_key = null;
var fallback_user = false;
var compact = getFParam("compact", "off") == "on";
var reservering_nr = getFParam("reservering", "");
var userPrincipalName = getFParam("userPrincipalName", null);
var date_from = getFParamDate("date_from", null);
var date_to = getFParamDate("date_to", null);
if (reservering_nr != "") {
// We gaan het event ophalen met een reserveringsnr als informatie
var res_reservering_key = parseInt(reservering_nr.split("/")[0], 10);
var res_rsv_ruimte_volgnr = parseInt((reservering_nr.split("/")[1] || 1), 10);
if (isNaN(res_reservering_key) || isNaN(res_rsv_ruimte_volgnr)) {
early_exit("Ongeldig reserveringsnr, verwachte formaat; 12345/1");
}
var sql = "SELECT rrr.res_rsv_ruimte_externnr2 host_id,"
+ " rrr.res_rsv_ruimte_externnr room_id,"
+ " p_host.prs_perslid_email host_email,"
+ " rr.res_ruimte_extern_id room_email,"
+ " rrr.res_rsv_ruimte_key res_rsv_ruimte_key,"
+ " p_host.prs_perslid_oslogin host_login"
+ " FROM res_rsv_ruimte rrr"
+ " JOIN prs_perslid p_host"
+ " ON p_host.prs_perslid_key = rrr.res_rsv_ruimte_host_key"
+ " JOIN res_ruimte_opstelling rro"
+ " ON rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
+ " JOIN res_ruimte rr ON rr.res_ruimte_key = rro.res_ruimte_key"
+ " WHERE rrr.res_reservering_key = " + res_reservering_key
+ " AND rrr.res_rsv_ruimte_volgnr = " + res_rsv_ruimte_volgnr;
var oRs = Oracle.Execute(sql);
if (!oRs.EoF) {
host_id = oRs("host_id").Value;
room_id = oRs("room_id").Value;
host_email = oRs("host_email").Value;
room_email = oRs("room_email").Value;
res_rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
fallback_user = oRs("host_login").Value === null ? false : !!oRs("host_login").Value.match(/^_MSGRAPH_FALLBACK_/);
} else {
early_exit("Reservering niet in Facilitor gevonden");
}
oRs.Close();
// Wat error-handling
if (host_id === null && room_id === null) {
if (room_email === null) {
early_exit("Ruimte is geen Exchange-gekoppelde ruimte");
} else {
early_exit("Reservering is niet aan Exchange gekoppeld");
}
} else if (fallback_user) {
early_exit("Deze reservering is geboekt op een fallback user, we kunnen hiervan niets uitlezen op basis van de reservering. Probeer de reservering zelf op te zoeken mbv een datum bereik");
}
// Haal nu de eigenlijke Exchange-events op
if (host_id && host_id != "##PENDING##" && host_email) {
var method = host_id.match(/^##iCalUId##/) ? "iCalUId" : "id";
result.host = hook.getCalendarEvent(method, host_email, host_id);
verifyMSGraphResult(result.host);
}
if (room_id && room_email) {
room_id = room_id.split("|")[1] || room_id.split("|")[0];
var method = room_id.match(/^##iCalUId##/) ? "iCalUId" : "id";
if (method == "iCalUId") {
room_id = room_id.slice(11); // Strip de '##iCalUId##'
}
result.room = hook.getCalendarEvent(method, room_email, room_id);
verifyMSGraphResult(result.room);
}
// Niet gevonden, nog eens proberen obv res_rsv_ruimte_key
if (!result.host && !result.room) {
if (host_id == "##PENDING##" && host_email) {
result.info.push("Deze reservering heeft nog geen antwoord van MSGraph ontvangen");
result.host = hook.getCalendarEvent("res_rsv_ruimte_key", host_email, res_rsv_ruimte_key);
verifyMSGraphResult(result.host);
if (!result.host) {
early_exit("Reservering niet in Exchange gevonden op basis van res_rsv_ruimte_key");
}
} else {
result.info.push("Reservering niet in Exchange gevonden");
}
if (!result.host) {
early_exit("Reservering niet in Exchange gevonden");
}
}
// Klaar
} else if (userPrincipalName && date_from != null && date_to != null) {
// We gaan het event ophalen met een (ruimte of gastheer)email en een datum bereik
var id = date_from.toISOString() + "##" + date_to.toISOString();
var response = hook.getCalendarEvent("date", userPrincipalName, id);
verifyMSGraphResult(response);
// Verwerk het resultaat
if (response.value) {
// Convert een javascript Array naar een JSON Array
var events = [];
for (var x in response.value) {
events.push(response.value[x]);
}
if (events.length != 1) {
result.info.push("Er zijn " + events.length + " events gevonden");
}
var sql = "SELECT 1"
+ " FROM res_ruimte"
+ " WHERE UPPER(res_ruimte_extern_id) = " + safe.quoted_sql_upper(userPrincipalName);
var oRs = Oracle.Execute(sql);
if (oRs.EoF) {
result.host = events;
} else {
result.room = events;
}
oRs.Close();
}
} else {
early_exit("Onvoldoende parameters meegegeven; zoek op reserveringsnr, of de combinatie; email/datum-van/datum-tot");
}
result.success = true;
// Strip onnodige velden
if (compact) {
result = strip(result);
};
Response.Write(JSON.stringify(result));
Response.End;
%>
<% ASPPAGE_END(); %>