244 lines
9.5 KiB
Plaintext
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(); %>
|