FSN#51222: Anonimiseren van historische bezoekers.

svn path=/Website/branches/v2017.3/; revision=37902
This commit is contained in:
Maykel Geerdink
2018-05-15 13:26:16 +00:00
parent 2976c7b2ce
commit 7b7f0ec1c2
5 changed files with 332 additions and 3 deletions

View File

@@ -92,11 +92,44 @@ function model_bez_kenmerk(params)
"dbs": "bez_kenmerk_systeem",
"label": L("mgt_srtkenmerk_systeem_adv"),
"typ": "number",
"LOV": L("mgt_kenmerk_systeemLOV"),
"bits": [
{
"name": "",
"label": "",
"typ": "check",
"mask": 15,
"radios": [
{
"name": "ksystem",
"label": L("mgt_kenmerk_systeem"),
"mask": 1,
"defaultvalue": 1
},
{
"name": "overview",
"label": L("mgt_kenmerk_systeem_overview"),
"mask": 2,
"defaultvalue": 1
},
{
"name": "conf",
"label": L("mgt_kenmerk_systeem_conf"),
"mask": 4,
"defaultvalue": 1
},
{
"name": "ano",
"label": L("mgt_kenmerk_systeem_ano"),
"mask": 8,
"defaultvalue": 1
}
]
}
],
"defaultvalue": 0,
"required": true
},
"length": {
"length": {
"dbs": "bez_kenmerk_lengte",
"label": L("mgt_srtkenmerk_lengte"),
"typ": "number"

View File

@@ -97,7 +97,41 @@ function model_prs_kenmerk(niveau, params)
"system": {
"dbs": "prs_kenmerk_systeem",
"label": L("mgt_srtkenmerk_systeem"),
"typ": "check"
"typ": "number",
"bits": [
{
"name": "",
"label": "",
"typ": "check",
"mask": 15,
"radios": [
{
"name": "ksystem",
"label": L("mgt_kenmerk_systeem"),
"mask": 1,
"defaultvalue": 1
},
{
"name": "overview",
"label": L("mgt_kenmerk_systeem_overview"),
"mask": 2,
"defaultvalue": 1
},
{
"name": "conf",
"label": L("mgt_kenmerk_systeem_conf"),
"mask": 4,
"defaultvalue": 1
},
{
"name": "ano",
"label": L("mgt_kenmerk_systeem_ano"),
"mask": 8,
"defaultvalue": 1
}
]
}
]
},
"length": {
"dbs": "prs_kenmerk_lengte",

View File

@@ -0,0 +1,40 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: fac_anonymize.asp
Description: Het anonimiseren van modules.
Parameters: moduleString
Note:
*/ %>
<%
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<%
protectRequest.validateToken();
var moduleString = getFParamArray("moduleString").join(",");
var autfunction = "WEB_PRSSYS";
var authparams = user.checkAutorisation(autfunction);
// Eerst PRS anonimiseren. De andere modules hebben allemaal referenties naar PRS.
// Bijvoorbeeld het veld bez_afspraak_gastheer die door trigger automatisch weer wordt gevuld met tekstnaam van host.
var anosql = "BEGIN"
if (moduleString.indexOf("PRS") != -1)
anosql += " ano.anonymizeprs('FAC_ANONYMIZE');";
if (moduleString.indexOf("BEZ") != -1)
anosql += " ano.anonymizebez('FAC_ANONYMIZE');";
anosql += " END;";
Oracle.Execute(anosql);
var result = { key: moduleString, success: true };
Response.Write(JSON.stringify(result));
%>

View File

@@ -0,0 +1,138 @@
<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: fac_anonimize_list.asp
Description: Toont van elke module het aantal te anonimeren records.
Parameters: module: filtert het resultaat (BEZ, PRS etc)
Context:
Requires: WEB_PRSSYS autorisatie
Note:
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="fac.inc" -->
<%
var smodule = getQParamArray("smodule");
var allmod = false;
if (smodule[0] == "-1")
allmod = true;
var showall = getQParamInt("showall", 0) == 1;
var outputmode = getQParamInt("outputmode", 0);
var autfunction = "WEB_PRSSYS";
var authparams = user.checkAutorisation(autfunction);
FCLTHeader.Requires({ plugins: ["jQuery"] })
%>
<html>
<head>
<% FCLTHeader.Generate({outputmode: outputmode}) %>
</head>
<body id="listbody">
<script type="text/javascript">
function mld_anonymize(rowArray, isMulti)
{
var pmoduleString = getKeyString(rowArray);
var data = { moduleString: pmoduleString };
protectRequest.dataToken(data);
$.post("../fac/fac_anonymize.asp",
data,
FcltCallbackRefresh,
"json");
}
</script>
<%
var anonymize_period = S("anonymize_period");
var sql;
var sqln = [];
if (allmod || inArray("BEZ", smodule))
{
sql = "SELECT 'BEZ' module"
+ " , 'afspraak' onderdeel"
+ " , COUNT(bez_afspraak_key) aantal"
+ " , MIN(bez_afspraak_datum) mindate"
+ " , MAX(bez_afspraak_datum) maxdate"
+ " , " + anonymize_period + " anonymize_period"
+ " FROM bez_afspraak"
+ " WHERE bez_afspraak_datum < TRUNC(SYSDATE - " + anonymize_period + ")";
sqln.push(sql);
}
if (allmod || inArray("PRS", smodule))
{
sql = "SELECT 'PRS' module"
+ " , 'perslid' onderdeel"
+ " , COUNT(p.prs_perslid_key) aantal"
+ " , MIN(COALESCE(p.prs_perslid_login, p.prs_perslid_aanmaak)) mindate"
+ " , MAX(COALESCE(p.prs_perslid_login, p.prs_perslid_aanmaak)) maxdate"
+ " , " + anonymize_period + " anonymize_period"
+ " FROM prs_perslid p"
+ " WHERE (p.prs_perslid_oslogin IS NULL"
+ " OR p.prs_perslid_oslogin NOT LIKE '\\_%' ESCAPE '\\')"
+ " AND p.prs_perslid_oslogin2 IS NULL"
+ " AND p.prs_perslid_apikey IS NULL"
+ " AND (COALESCE(p.prs_perslid_login, p.prs_perslid_aanmaak) + " + anonymize_period + ") < SYSDATE"
+ " AND p.prs_perslid_upper != UPPER('" + L("lcl_prs_old_employee") + "')"
+ " AND NOT EXISTS (SELECT 1"
+ " FROM prs_v_verplichting_keys"
+ " WHERE prs_perslid_key = p.prs_perslid_key)"
sqln.push(sql);
}
sql = "SELECT module"
+ " , onderdeel"
+ " , aantal"
+ " , mindate"
+ " , maxdate"
+ " , anonymize_period"
+ " , (SELECT COUNT(ft.fac_tracking_key)"
+ " FROM fac_tracking ft"
+ " WHERE TRUNC(ft.fac_tracking_datum, 'DDD') = TRUNC(SYSDATE, 'DDD')"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = (module || 'ANO'))) anonimized_today"
+ " FROM (" + sqln.join(" UNION ") + ")";
function fncolaantal(oRs)
{
return oRs("aantal").Value != null? oRs("aantal").Value : 0;
}
function fncolanoPeriod(oRs)
{
return oRs("anonymize_period").Value + " " + L("lcl_fac_days");
}
var rst = new ResultsetTable({ sql: sql,
keyColumn: "module",
ID: "memorizetable",
title : "Anonimiseren",
showAll: showall,
outputmode: outputmode
});
rst.addColumn(new Column({caption: L("lcl_fac_module"), content: "module"}));
rst.addColumn(new Column({caption: L("lcl_fac_component"), content: "onderdeel"}));
rst.addColumn(new Column({caption: L("lcl_fac_aantal"), content: fncolaantal, datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_fac_ano_time_period"), content: "mindate", datatype: "date"}));
rst.addColumn(new Column({caption: L("lcl_fac_ano_time_period"), content: "maxdate", datatype: "date"}));
rst.addColumn(new Column({caption: L("lcl_fac_anonymize_period"), content: fncolanoPeriod}));
rst.addColumn(new Column({caption: L("lcl_fac_anonymized_today"), content: "anonimized_today"}));
rst.addAction({action: "mld_anonymize", caption: L("mgt_kenmerk_systeem_ano"), /*enabler:"eAnony",*/ multi: true, multiOnce: true});
var cnt = rst.processResultset();
%>
</body>
</html>

View File

@@ -0,0 +1,84 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: fac_anonimize.asp
Description: Anonimiseringscherm
Parameters:
Context: Via URL (alleen prssys)
Note:
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<%
FCLTHeader.Requires({plugins:["jQuery"], js: []});
var autfunction = "WEB_PRSSYS";
var authparams = user.checkAutorisation(autfunction);
var module = getQParam("module", "");
%>
<html>
<head>
<%
FCLTHeader.Generate() %>
<script type="text/javascript">
var anysearch = false;
function doSubmit()
{
document.forms.u2.submit();
}
</script>
</head>
<body id="searchbody">
<div id="search">
<form name="u2" method="get" action="fac_anonymize_list.asp" target="workFrame">
<%
BLOCK_START("searchtable", L("lcl_filterblok"));
%>
<tr>
<td class="searchkolom1">
<table><!-- x rijen, 2 kolommen: label + veld -->
<!-- module -->
<%
sql = "SELECT DISTINCT fac_setting_module fac_module"
+ " , fac_setting_module fac_module"
+ " FROM fac_setting "
+ " WHERE fac_setting_module IN ('BEZ', 'PRS')" // Vooralsnog alleen voor bezoekers en
+ (module != ""
? " AND fac_setting_module = " + safe.quoted_sql(module)
: "")
+ " ORDER BY fac_setting_module";
FCLTselector("smodule",
sql,
{ label: L("lcl_fac_module"),
trclass: "primsearch",
emptyOption: module == ""? L("lcl_all") : null,
multi: true
});
%>
</table>
</td>
<td>
</td>
</tr>
<% BLOCK_END();
var buttons = [ {title: L("lcl_search"), action: "doSubmit()" } ];
CreateButtons(buttons, { entersubmit: true});
%>
</form>
</div> <!-- search -->
<div id="result">
<iframe width="100%" height="100%" src="../Shared/empty.asp"
name="workFrame" id="workFrame" onload='FcltMgr.iframeLoaded(this)'
frameborder="0" scrolling="no"></iframe>
</div>
</body>
</html>