Files
Facilitor/APPL/API2/model_fac_widget.inc
2023-09-29 16:38:16 +00:00

346 lines
14 KiB
PHP

<% /*
$Revision$
$Id$
File: model_fac_widget.inc
Description:
Context:
Notes:
*/
%>
<!-- #include file="../fac/fac_menu.inc" -->
<!-- #include file="../fac/fac_widget.inc" -->
<%
function model_fac_widget(onpage_mode)
{
this.records_name = "widgets";
this.record_name = "widget";
this.table = "fac_widget";
this.primary = "fac_widget_key";
this.autfunction = ["WEB_WGTMAN", "WEB_PRSSYS"];
var hasPRSSYS = user.has("WEB_PRSSYS");
var advancedAuth = hasPRSSYS || user.has("WEB_WGTMAN");
var fac_widget_sql = mode == "show" || mode == "list"; // In deze modes joint de query met de fac_widget tabel, en moeten we dus ook op widget_type matchen
var scope_ref_fields = !hasPRSSYS // Met PRSSYS mag je alles zien
&& (!advancedAuth // Met WGTUSE altijd scopen
|| !fac_widget_sql); // Met WGTMAN mag je alleen ongescoped /zien/ (de definitie), niet wijzigen (de inhoud)
// In onpage_mode wordt in buildWidgetTypeLOV() geregeld welke types je mag wijzigen.
// Met WEB_WGTUSE is dat alleen type WGT zodat je de huidige widget kan inwisselen voor een bestaande andere
// Die variant gaat uiteindelijk via een custom REST_PUT/POST niet langs mode == "save" waardoor het huidige record niet wordt aangepast.
if (onpage_mode && mode != "save")
this.autfunction.push("WEB_WGTUSE");
this.record_title = L("fac_widget");
this.records_title = L("fac_widget_m");
this.fields = {
"id": {
"dbs": "fac_widget_key",
"label": L("lcl_key"),
"typ": "key",
"required": true,
"seq": "fac_s_fac_widget_key",
"defaultvalue": null
},
"type": {
"dbs": "fac_widget_type",
"label": L("fac_widget_type"),
"typ": "varchar",
"LOV": buildWidgetTypeLOV(),
"defaultvalue": (onpage_mode ? "WGT" : "FAC"),
"hidden_fld": (onpage_mode ? false : S("fac_usrrap_mode") == 0),
"required": true
},
"name" : {
"dbs": "fac_widget_naam",
"label": L("fac_widget_naam"),
"typ": "varchar",
"required": true,
"filter": "like",
"translate": true
},
"ref_key_MK": {
"dbs": "fac_widget_typerefkey",
"label": L("fac_widget_reftype_MK"),
"typ": "key",
"foreign": { "tbl": "("+fillMenuArray(1, { "sqlOnly": true, "level": "1" })+")",
"key": "fac_menu_key",
"desc": "DECODE(groep "
+ ", 0, "+ safe.qL("lcl_menu_pers")
+ ", 1, "+ safe.qL("lcl_menu_prof")
+ ", 2, "+ safe.qL("lcl_menu_config")
+ ", 3, "+ safe.qL("lcl_menu_mobile")
+ ", 7, "+ safe.qL("lcl_menu_app")+" ) || ': ' || lcl.x('label', fac_menu_key, label)",
"where": "groep IN (0, 1, 2, 3, 7)" // 0=personal, 1=professional, 2=management, 3=mobile, 4=?, 5=pinned tab, 6=favoriten menu, 7=App
+ (fac_widget_sql ? " AND fac_widget.fac_widget_type = 'MK'" : ""),
"order": "groep, fac_menu_volgnr" },
"hidden_fld": S("fac_usrrap_mode") == 0,
"required": true
},
"ref_key_MI": {
"dbs": "fac_widget_typerefkey",
"label": L("fac_widget_reftype_MI"),
"typ": "key",
"foreign": { "tbl": "("+fillMenuArray(1, { "sqlOnly": true, "level": "2" })+")",
"key": "fac_menu_key",
"desc": "DECODE(groep "
+ ", 0, "+ safe.qL("lcl_menu_pers")
+ ", 1, "+ safe.qL("lcl_menu_prof")
+ ", 2, "+ safe.qL("lcl_menu_config")
+ ", 3, "+ safe.qL("lcl_menu_mobile")
+ ", 7, "+ safe.qL("lcl_menu_app")+" ) || ': ' || lcl.x('label', fac_menu_key, label)",
"where": "groep IN (0, 1, 2, 3, 7)" // 0=personal, 1=professional, 2=management, 3=mobile, 4=?, 5=pinned tab, 6=favoriten menu, 7=App
+ (fac_widget_sql ? " AND fac_widget.fac_widget_type = 'MI'" : ""),
"order": "groep, fac_menu_volgnr" },
"hidden_fld": S("fac_usrrap_mode") == 0,
"required": true
},
"ref_key_NWS": {
"dbs": "fac_widget_typerefkey",
"label": L("fac_widget_reftype_NWS"),
"typ": "key",
"foreign": { "tbl": "fac_nieuws_groep",
"key": "fac_nieuws_groep_key",
"desc": "fac_nieuws_groep_omschrijving",
"where": (fac_widget_sql ? "fac_widget.fac_widget_type = 'NWS'" : "1=1") },
"hidden_fld": S("fac_usrrap_mode") == 0,
"emptyoption": "",
"required": false
},
"ref_key_RAP": {
"dbs": "fac_widget_typerefkey",
"label": L("fac_widget_reftype_RAP"),
"typ": "key",
"foreign": { "tbl": "fac_usrrap",
"key": "fac_usrrap_key",
"desc": "fac_usrrap_omschrijving",
"where": (fac_widget_sql ? "fac_widget.fac_widget_type = 'RAP'" : "1=1")
+ (scope_ref_fields
? " AND ( fac_functie_key IS NULL"
+ " OR fac_functie_key IN (SELECT w.fac_functie_key"
+ " FROM fac_v_webgebruiker W"
+ " WHERE w.prs_perslid_key = " + user_key + "))"
+ " AND BITAND (COALESCE (fac_usrrap_functie, 0), 32) = 0"
: "") },
"hidden_fld": S("fac_usrrap_mode") == 0,
"emptyoption": "",
"required": true
},
"ref_key_FAQ": {
"dbs": "fac_widget_typerefkey",
"label": L("fac_widget_reftype_FAQ"),
"typ": "key",
"foreign": { "tbl": "fac_faq",
"key": "fac_faq_key",
"desc": "SUBSTR(fac_faq_question, 0, 40) || ' - [' || fac_faq_key || ']'",
"where": (fac_widget_sql ? "fac_widget.fac_widget_type = 'FAQ'" : "1=1")
+ (scope_ref_fields
? " AND ( fac_functie_key IS NULL"
+ " OR fac_functie_key IN (SELECT w.fac_functie_key"
+ " FROM fac_v_webgebruiker W"
+ " WHERE w.prs_perslid_key = " + user_key + "))"
: "") },
"hidden_fld": S("fac_usrrap_mode") == 0 || S("faq_enabled") == 0,
"emptyoption": "",
"required": true
},
"content": {
"dbs": "fac_widget_content",
"label": L("fac_widget_content"),
"typ": "memo",
"hidden_fld": S("fac_usrrap_mode") == 0,
"required": true
},
"linkurl": {
"dbs": "fac_widget_url",
"label": L("fac_widget_url"),
"typ": "varchar",
"required": true
},
"title": {
"dbs": "fac_widget_title",
"label": L("fac_widget_title"),
"translate": true,
"typ": "varchar",
"filter": "like",
"friendlyname": true
},
"refreshtime": {
"dbs": "fac_widget_refreshtime",
"label": L("fac_widget_refreshtime"),
"typ": "number",
"multiedit": true
},
"widgetid": {
"dbs": "fac_widget_id",
"label": L("fac_widget_id"),
"typ": "varchar"
},
"widgetheight": {
"dbs": "fac_widget_height",
"label": L("fac_widget_height"),
"typ": "number",
"multiedit": true,
"hidden_fld": true
},
"widgetwidth": {
"dbs": "fac_widget_width",
"label": L("fac_widget_width"),
"typ": "number",
"multiedit": true,
"hidden_fld": true
},
"created": {
"dbs": "fac_widget_aanmaak",
"label": L("fac_widget_aanmaak"),
"typ": "date",
"hidden_fld": true,
"readonly": true
},
"authorization": {
"dbs": "fac_functie_key",
"label": L("fac_widget_autorisatie"),
"typ": "key",
"foreign": "fac_functie",
"foreignfiltercode": "SELF",
"multiedit": true
}
}
var authFAQ;
function buildWidgetTypeLOV()
{
var widget_type_LOV = "";
if (!advancedAuth)
widget_type_LOV = L("fac_widget_noauth_typeWGT");
else if (S("fac_usrrap_mode") == 1)
{
widget_type_LOV = L("fac_widget_typeLOV");
if (onpage_mode)
widget_type_LOV = L("fac_widget_typeWGT") + ";" + widget_type_LOV;
if (S("fac_html_strictness") == 0) {
widget_type_LOV += ";" + L("fac_widget_typeRAW");
}
if (S("faq_enabled") == 1)
{
authFAQ = user.func_enabled2("FAQ", { prs_key: user_key, isOptional: true });
if (authFAQ && authFAQ.anyfound)
widget_type_LOV += ";" + L("fac_widget_typeFAQ");
}
var authCAD = user.func_enabled2("CAD", { prs_key: user_key, isOptional: true }); // TODO; ALG scoping
if (authCAD && authCAD.anyfound)
widget_type_LOV += ";" + L("fac_widget_typeFLR");
}
else
{
widget_type_LOV = L("fac_widget_noauth_typeLOV");
if (onpage_mode)
widget_type_LOV = L("fac_widget_noauth_typeWGT") + ";" + widget_type_LOV;
}
return widget_type_LOV;
}
addfaqauth: if (S("fac_usrrap_mode") == 1 && S("faq_enabled") == 1)
{
if (authFAQ && (authFAQ.canRead("WEB_FAQBOF") || authFAQ.canRead("WEB_FAQMGT")))
break addfaqauth; // Dan mag ik alles zien
var lvl_bits = 0;
if (authFAQ && authFAQ.canRead("WEB_FAQUSE"))
lvl_bits += 1;
if (authFAQ && authFAQ.canRead("WEB_FAQFOF"))
lvl_bits += 2;
this.fields.ref_key_FAQ.foreign.where += " AND BITAND (fac_faq_level, " + lvl_bits + ") <> 0";
}
// 4 velden gebruiken 1 onderliggend DB-veld, bij de im-/export slaan we die weer plat anders AiAi dubbele kolomnaam
if (mode == "api2" || mode == "import")
{
delete this.fields.ref_key_MI;
delete this.fields.ref_key_MK;
delete this.fields.ref_key_NWS;
delete this.fields.ref_key_RAP;
delete this.fields.ref_key_FAQ;
this.fields.ref_key = {
"dbs": "fac_widget_typerefkey",
"typ": "key"
}
}
if (onpage_mode)
{
this.fields.widgets = {
"dbs": "fac_widget_key",
"label": L("fac_widget"),
"typ": "key",
"foreign": { "tbl": "fac_widget",
"key": "fac_widget_key",
"desc": "fac_widget_naam",
"where": "( fac_functie_key IS NULL"
+ " OR fac_functie_key IN (SELECT w.fac_functie_key"
+ " FROM fac_v_webgebruiker W"
+ " WHERE w.prs_perslid_key = " + user_key + "))"
+ (S("fac_usrrap_mode") == 0 ? " AND fac_widget_type = 'FAC'" : ""),
"order": "fac_widget_public DESC, fac_widget_naam" },
"required": true
}
}
var gparams = {
"GET": {
"wheres": []
}
}
if (S("fac_usrrap_mode") == 0)
gparams.GET.wheres.push("fac_widget.fac_widget_type = 'FAC'");
if (!hasPRSSYS) // Dan alleen de widgets waar je rechten op hebt
{
gparams.GET.wheres.push("( fac_widget.fac_functie_key IS NULL"
+ " OR fac_widget.fac_functie_key IN (SELECT w.fac_functie_key"
+ " FROM fac_v_webgebruiker W"
+ " WHERE w.prs_perslid_key = " + user_key + "))");
}
if (advancedAuth)
{
if (S("fac_usrrap_mode") == 1)
{
this.fields.public = {
"dbs": "fac_widget_public",
"label": L("fac_widget_public"),
"typ": "check0",
"multiedit": true,
"defaultvalue": 0
}
}
}
else
{
this.fields.authorization.hidden_fld = true;
if ("widgets" in this.fields) // = Widgetbibliotheek in de onpage_mode
this.fields.widgets.foreign.where += " AND ( fac_widget_public = 1"
+ " OR fac_widget_key IN"
+ " (SELECT fac_widget_key"
+ " FROM fac_widget_onpage o, fac_widget_page p"
+ " WHERE o.fac_widget_page_key = p.fac_widget_page_key"
+ " AND p.prs_perslid_key = " + user_key + "))";
}
this.REST_GET = generic_REST_GET(this, gparams);
this.REST_POST = generic_REST_POST(this);
this.REST_PUT = generic_REST_PUT(this);
if (!onpage_mode)
{
this.REST_DELETE = generic_REST_DELETE(this);
}
}
%>