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

     File:          fac_edit_groeprechten_save.asp.asp
     Description:   Het echte bewaren van een autorisatie
     Parameters:    fac_groep
                    fac_functie
                    ins_discipline  optioneel
                    simplemode      optioneel, 1 voor alleen 'Toegang' vinkje
     Context:       Vanuit fac_edit_groeprechten.asp

*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<%
protectRequest.validateToken();

user.checkAutorisation("WEB_PRSSYS"); // TODO Minder scherp

var groep_key = getQParamInt("fac_groep");
var functie_key = getQParamInt("fac_functie");
var disc_arr_key = getQParamIntArray("ins_discipline", []);

// Rechten PRSSYS, FACTAB en FACFAC mag je alleen manipuleren als je zelf die rechten hebt
// (WEB_PRSSYS is een beetje dubbelop maar wel zo duidelijk)
if (functie_key == F("WEB_PRSSYS"))
    user.checkAutorisation("WEB_PRSSYS");
if (functie_key == F("WEB_FACTAB"))
    user.checkAutorisation("WEB_FACTAB");
if (functie_key == F("WEB_FACFAC"))
    user.checkAutorisation("WEB_FACFAC");

var simple_mode = getFParamInt("simple_mode", 0) == 1;
if (simple_mode)
{
    var prsread  = getFParamInt("allread");
    var prswrite = getFParamInt("allwrite", prsread);
    var algread  = prsread;
    var algwrite = prswrite;
}
else
{
    var prsread  = getFParamInt("prsread",  -2);
    var prswrite = getFParamInt("prswrite", -2);
    var algread  = getFParamInt("algread",  -2);
    var algwrite = getFParamInt("algwrite", -2);
}

var level = Oracle.Get("fac_functie_min_level", "fac_functie", functie_key);
if (!(level & 2)) // geen aparte schrijfrechten
{
    prswrite = -1;
    algwrite = -1;
}
if (level & ( 4 | 8))
{
    if (!(level & 4)) // geen PRS scope
    {
        prsread = -1;
        prswrite = algwrite < 9?-1:9; // waarschijnlijk don't care
    }
    if (!(level & 8)) // geen ALG scope
    {
        algread = -1;
        algwrite = prswrite < 9?-1:9; // waarschijnlijk don't care
    }
}
else // Bij alleen Ja/Nee vullen we PRS in
{
    algread = prsread;
    algwrite = prswrite;
}

var fdisc = disc_arr_key.length >= 1; // Blijkbaar met disciplines
if (!fdisc)
    disc_arr_key = [-1];
for (var i = 0; i < disc_arr_key.length; i++)
{
    var disc_key = disc_arr_key[i];
    var sql = "SELECT *"
            + "  FROM fac_groeprechten"
            + " WHERE fac_groep_key = " + groep_key
            + "   AND fac_functie_key = " + functie_key;
    if (fdisc)
        sql += " AND ins_discipline_key = " + disc_key;
    var oRs = Oracle.Execute(sql);
    var gr_key = -1;
    if (!oRs.Eof)
    {
        gr_key = oRs("fac_groeprechten_key").Value;
    }
    oRs.Close();

    if (algread == 9 || prsread == 9) // Geen rechten (over)
    {
        if (gr_key > 0)
        {
            var sql = "DELETE FROM fac_groeprechten WHERE fac_groeprechten_key = " + gr_key;
            Oracle.Execute(sql);
        }
    }
    else
    {
        var fields =  [ { dbs: "fac_gebruiker_prs_level_read",  typ: "number", val: prsread },
                        { dbs: "fac_gebruiker_prs_level_write", typ: "number", val: prswrite },
                        { dbs: "fac_gebruiker_alg_level_read",  typ: "number", val: algread },
                        { dbs: "fac_gebruiker_alg_level_write", typ: "number", val: algwrite }
                      ]
        if (gr_key > -1)
        {
            var sql = buildUpdate("fac_groeprechten", fields)
                    + " fac_groeprechten_key = " + gr_key;
            Oracle.Execute(sql);
        }
        else
        {
            fields.push({ dbs: "fac_functie_key",     typ: "key", val: functie_key },
                        { dbs: "fac_groep_key",       typ: "key", val: groep_key },
                        { dbs: "ins_discipline_key",  typ: "key", val: disc_key }
                       );
            var grpIns = buildInsert("fac_groeprechten", fields);
            Oracle.Execute(grpIns.sql);
        }
    }
}
var result = {success: true, functie_key: functie_key, groep_key: groep_key, disc_key: disc_arr_key.join(",") };

Response.Write(JSON.stringify(result));

ASPPAGE_END();
%>
