167 lines
7.9 KiB
JavaScript
167 lines
7.9 KiB
JavaScript
// ******************************************
|
||
// * $Id$
|
||
// *
|
||
// * sendAPP()
|
||
// *
|
||
// * sendAPP function is used to send APP push notifications
|
||
// *
|
||
// * arguments:
|
||
// * p_perslid_key: Send the notificatie to this perslid
|
||
// * p_msg: APP message to send.
|
||
// *
|
||
// ******************************************
|
||
function sendAPP( p_perslid_key
|
||
, p_msg
|
||
, p_url
|
||
, noti_json
|
||
)
|
||
{
|
||
var APPsend = false;
|
||
|
||
var sql = "SELECT aut_client_perslid_key "
|
||
+ " , aut_client_perslid_pushtoken "
|
||
+ " , aut_client_perslid_device_id "
|
||
+ " , aut_client_id"
|
||
+ " , prs_perslid_naam_friendly"
|
||
+ " , ba.*"
|
||
+ " FROM aut_client_perslid acp"
|
||
+ " , aut_client ac"
|
||
+ " , prs_bedrijf b"
|
||
+ " , prs_bedrijfadres ba"
|
||
+ " , prs_v_perslid_fullnames p"
|
||
+ " WHERE acp.aut_client_key = ac.aut_client_key"
|
||
+ " AND acp.prs_perslid_key = " + p_perslid_key
|
||
+ " AND acp.prs_perslid_key = p.prs_perslid_key"
|
||
+ " AND ac.prs_bedrijf_key = b.prs_bedrijf_key(+)" // outer join alleen omdat FCLTAPP1 hardcoded is
|
||
+ " AND b.prs_bedrijf_key = ba.prs_bedrijf_key(+)"
|
||
+ " AND ba.prs_bedrijfadres_type(+) = 'N'"; // Notificatie
|
||
var oRs = Oracle.Execute(sql);
|
||
while (!oRs.Eof)
|
||
{ // Let op: lang niet alles wordt (al) ondersteund
|
||
var bedrijfadres = { key: oRs("prs_bedrijf_key").value,
|
||
url: oRs("prs_bedrijfadres_url").value,
|
||
encoding: oRs("prs_bedrijfadres_encoding").value,
|
||
ordermode: oRs("prs_bedrijfadres_ordermode").value,
|
||
typeopdr_key: oRs("mld_typeopdr_key").value,
|
||
certificateName: oRs("prs_bedrijfadres_certificate").value || "",
|
||
extension: oRs("prs_bedrijfadres_ext").value||"",
|
||
flexfiles: oRs("prs_bedrijfadres_flexfiles").value,
|
||
AttachFile: oRs("prs_bedrijfadres_attachfile").Value,// E<>n vaste bijlage ('algemene voorwaarden') om bij te sluiten
|
||
XSLbedr: (oRs("prs_bedrijfadres_xsl").value||"").toLowerCase(),
|
||
username: oRs("prs_bedrijfadres_username").value,
|
||
password: oRs("prs_bedrijfadres_password").value,
|
||
authmethod: oRs("prs_bedrijfadres_authmethod").value || 0,
|
||
soapversion: oRs("prs_bedrijfadres_soapversion").value,
|
||
soapaction: oRs("prs_bedrijfadres_soapaction").value,
|
||
locksecret: oRs("prs_bedrijfadres_locksecret").value,
|
||
loglevel: oRs("prs_bedrijfadres_loglevel").value
|
||
};
|
||
if (!bedrijfadres.key && oRs("aut_client_id").Value == 'FCLTAPP1') // NWNX is de enige die we hardcoded ondersteunen
|
||
{
|
||
bedrijfadres.url = S("puo_apppushurl"); // "http://facilitordev.azurewebsites.net/api/Notification/SendNotification"; Ooit ook uit een kanaal
|
||
//bedrijfadres.XSLbedr = '../appl/shared/fcltapp1.xsl';
|
||
if (!bedrijfadres.url)
|
||
{
|
||
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want puo_apppushurl niet geconfigureerd.");
|
||
oRs.MoveNext()
|
||
continue;
|
||
}
|
||
}
|
||
if (!bedrijfadres.url)
|
||
{
|
||
oRs.MoveNext()
|
||
continue;
|
||
}
|
||
|
||
if (!oRs("aut_client_perslid_pushtoken").Value)
|
||
{
|
||
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want aut_client_perslid_pushtoken is leeg");
|
||
oRs.MoveNext()
|
||
continue;
|
||
}
|
||
|
||
// Dit zou ik het liefst doen met een stylesheet achtige oplossing en dan een XML2JSON
|
||
// Enerzijds wil je echter gewoon de volledige standaard xml_content gebruiken
|
||
// maar anderzijds zit daar in het bijzonder het pushtoken niet in
|
||
// Bovendien kan ik me ook goed een APP voorstellen waarbij het pushtoken in de url moet komen,
|
||
// dat red je ook weer niet echt met een stylesheet.
|
||
// Welbeschouwd moet er misschien beter een plugin achtige constructie komen?
|
||
// Praktijk afwachten maar
|
||
if (bedrijfadres.url == "https://fcm.googleapis.com/fcm/send")
|
||
{
|
||
var json = { "notification":
|
||
{
|
||
"title" : "Facilitor",
|
||
"body" : p_msg
|
||
},
|
||
"to" : oRs("aut_client_perslid_pushtoken").Value,
|
||
"data" : {
|
||
"title" : "Facilitor",
|
||
"body" : p_msg
|
||
}
|
||
};
|
||
|
||
if (S("puo_forceapppushtoken"))
|
||
{
|
||
json.notification.to = S("puo_forceapppushtoken");
|
||
}
|
||
if (p_url)
|
||
{
|
||
json.data["url"] = p_url;
|
||
json.data["fullurl"] = S("puo_fclt_web_url") + p_url; // als de APP een webclient van FACILITOR is kan hij hier 'naar toe' springen
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var json = {
|
||
"Title" : "Facilitor",
|
||
"Message" : p_msg,
|
||
"Tag" : oRs("aut_client_perslid_pushtoken").Value,
|
||
"notification" : noti_json
|
||
};
|
||
if (S("puo_forceapppushtoken"))
|
||
{
|
||
json.Tag = S("puo_forceapppushtoken");
|
||
}
|
||
if (p_url)
|
||
{
|
||
json["Url"] = p_url;
|
||
json["FullUrl"] = S("puo_fclt_web_url") + p_url; // als de APP een webclient van FACILITOR is kan hij hier 'naar toe' springen
|
||
}
|
||
}
|
||
|
||
var body = JSON.stringify(json);
|
||
var forcemsg = "APP bericht: '{0}' wordt via {1} verzonden naar: {2}/{3}".format(p_msg, oRs("aut_client_id").Value,
|
||
oRs("prs_perslid_naam_friendly").Value,
|
||
oRs("aut_client_perslid_device_id").Value);
|
||
forcemsg += "\n Registered pushtoken: " + oRs("aut_client_perslid_pushtoken").Value;
|
||
if (S("puo_forceapppushtoken"))
|
||
{
|
||
forcemsg += "\n (effective to pushtoken: " + json.Tag + ")";
|
||
}
|
||
Log2File(1, forcemsg);
|
||
Log2File(1, "Payload: " + body);
|
||
var params = bedrijfadres;
|
||
params.data = body;
|
||
params.headers = { "Content-Type": "application/json" };
|
||
if (bedrijfadres.url == "https://fcm.googleapis.com/fcm/send")
|
||
{
|
||
params.headers["Authorization"] = "key={0}".format(bedrijfadres.certificateName); // let op: bedrijfadres.password is natuurlijk logischer maar die is met DB37 te klein
|
||
}
|
||
var xmlHTTP = doHTTP(bedrijfadres.url, params);
|
||
if (xmlHTTP.status >= 200 && xmlHTTP.status <= 299)
|
||
{
|
||
APPsend = true;
|
||
}
|
||
else
|
||
{ // errors blijven status 200 opleveren en zijn door doHTTP nog niet gelogged
|
||
Log2File(0, "APP push xmlHTTP error "
|
||
+ xmlHTTP.status + "/ " + xmlHTTP.statusText
|
||
+ "/" + xmlHTTP.responseText);
|
||
}
|
||
oRs.MoveNext()
|
||
}
|
||
oRs.Close();
|
||
return APPsend;
|
||
}
|