<%@language = "javascript" %>
<% /*
     $Revision$
     $Id$

     NotifyMessage.asp

     Kijk of de notificatie queue fac_notificatie een ongelezen bericht voor ons met soort = '8' bevat
     Daarvan geven we een popupje en daarna markeren deze berichten als gelezen

     We worden elke S("NotifyMessageInterval") seconde (default 90) gecontroleerd

     NOOT: Per interval wordt 1 popup gegeven met alle berichten sinds de vorige keer, met een tijdstip.

     LET OP: Dit bestand wordt bij UWVA op drukke momenten consequent 10 keer per seconde/
             34000 keer per uur opgeroepen. Performance is essentieel!
             In het bijzonder bijvoorbeeld een aanroep van user.__require_prs_perslid voorkomen
*/
LCL_Disable = 1; // Performance
var JSON_Result = true;
var EXPIRED_PASSWORD_OK = true; // performance
%>
<!-- #include file="../Shared/common.inc" -->
<%
//protectRequest.validateToken(); // De RVT_token wordt maar 1 keer gezet, dus is de volgende keer verlopen.
// *Wij* bepalen wanneer de volgende controle komt.
// Je zou als er daadwerkelijk een message is de volgende controle
// wat sneller (of juist langzamer) kunnen doen. Hypothetisch...
var result = { nextCheck: S("NotifyMessageInterval") * 1000 };
if (user_key > 0)
{
    var sql = "SELECT fn.fac_notificatie_key,"
            + "       fn.fac_notificatie_oms,"
            + "       fn.fac_notificatie_datum,"
            + "       fn.fac_notificatie_refkey,"
            + "       fsn.fac_srtnotificatie_url"
            + "  FROM fac_notificatie fn, fac_srtnotificatie fsn"
            + " WHERE fn.fac_srtnotificatie_key = fsn.fac_srtnotificatie_key"
            + "   AND fn.prs_perslid_key_receiver = " + user_key
            + "   AND BITAND (fn.fac_notificatie_status, 8) = 8" // Onverwerkte popup
            + " ORDER BY fn.fac_notificatie_datum";
    var oRs = Oracle.Execute(sql);
    var resetnotis = [];
    var url, msg, refkey;
    result.noti = [];
    while (!oRs.eof)
    {
          var dt = new Date(oRs("fac_notificatie_datum").Value);
          if (dt > (new Date).midnight())
            dtformat = toTimeString(dt); // vandaag laten we de datum achterwege
          else
            dtformat = toDateTimeString(dt);
          url = oRs("fac_srtnotificatie_url").Value || "";
          msg = oRs("fac_notificatie_oms").Value || "";
          refkey = oRs("fac_notificatie_refkey").Value || -1;
          result.noti.push({ "refkey": refkey, "url": url, "prefix": dtformat + ": ", "msg": msg });
          resetnotis.push(oRs("fac_notificatie_key").Value);
          oRs.moveNext();
    }
    oRs.close();

    // Reset popup bits for these notifications
    if (resetnotis.length > 0)
    {
        var sql = "UPDATE fac_notificatie"
                + "   SET fac_notificatie_status = BITAND (fac_notificatie_status, 255-8)" // Verwerkte popup
                + " WHERE fac_notificatie_key IN (" + resetnotis.join(",") + ")";
        Oracle.Execute(sql);
    }
}

Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %> 
