282 lines
14 KiB
PHP
282 lines
14 KiB
PHP
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: persoonselector.inc
|
|
Description: Algemene interface functie om een personen suggestbox te maken
|
|
Deze moet je kunnen includen en aanroepen.
|
|
Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de persoonnaam bevat (persoonnaam veld)
|
|
en een hidden keyveld die de key van de persoon bevat (persoonkey veld).
|
|
Het persoonnaam veld heeft geen naam en wordt niet meegesubmit.
|
|
Het persoonkey veld heeft een naam en wordt meegesubmit.
|
|
Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
|
|
parameters: fieldName: veldnaam van het persoonkey veld. Dit veld wordt gesubmit.
|
|
objectName: naam van het suggest object dat wordt aangemaakt.
|
|
params: object met meegegeven parameters.
|
|
perslidKey: initiële key waarde van de persoon die ingevuld moet worden.
|
|
multitoggle: Sta multi-toggle toe
|
|
idadd: Identieficatie verschil bij gebruik van meerdere persoonselectoren
|
|
label: label dat voor het persoonnaam veld wordt weergegeven.
|
|
filtercode: extra filtercode voor de query die gebruikt wordt voor de suggest.
|
|
onChange: onchange op het textveld.
|
|
trclass: wordt ook op de <tr> gezet.
|
|
autlevel: PRS autorisatie niveau voor de query die gebruikt wordt voor de suggest.
|
|
extraParamField: veldnaam voor een extra hidden parameter veld.
|
|
isBad: boolean die aangeeft dat het persoonnaam veld als ongeldig
|
|
en leeg weergegeven moet worden (true|false(default)).
|
|
readonly: geeft aan of het persoonnaam veld readonly weergegeven moet worden (true|false(default)).
|
|
filtercode: filtercode van extra filter clausule voor initiële waarde.
|
|
moreinfo: geeft een extra informatie button achter het label veld of achter de suggest als er geen label is.
|
|
Klikken hierop geeft informatie over de geselecteerde waarde.
|
|
suppressEmpty Onderdrukt het veld helemaal indien EN readonly EN leeg.
|
|
suppressNoValues Onderdrukt het veld helemaal indien er geen waarden zijn.
|
|
noBad Als perslid_key niet gevonden binnen filter dan veld leeglaten
|
|
(in plaats van standaard gedrag: naam wel opzoeken maar 'Bad' maken).
|
|
mobile: true als mobile (default false)
|
|
whenEmpty Text in suggest veld als deze leeg is. Indien niet meegegeven dan standaard string.
|
|
*/ %>
|
|
|
|
<!-- #include file="./Suggest/persoonFilter.inc" -->
|
|
|
|
<%
|
|
FCLTHeader.Requires({ plugins: ["suggest", "jQuery"], js: ["iface.js"] });
|
|
|
|
function FCLTpersoonselector(fieldName, objectName, params)
|
|
{
|
|
Response.Write(FCLTpersoonselector_HTML(fieldName, objectName, params));
|
|
}
|
|
|
|
// Zo moet het dan worden;
|
|
function FCLTpersoonselector_HTML(fieldName, objectName, params)
|
|
{
|
|
var resultstr = "";
|
|
params = params || {};
|
|
var isMobile = ("mobile" in params) ? params.mobile : (typeof mobile != "undefined");
|
|
var sgType = params.sgType || "persoon";
|
|
var idadd = "";
|
|
if (params.idadd)
|
|
idadd = params.idadd;
|
|
if (params.suppressNoValues)
|
|
{ // Check of er wel waarden zijn.
|
|
var filtClause = getFiltClausePersoon(params.filtercode, params);
|
|
var extraInf = getExtraInfPersoon(params.extracode);
|
|
sql = "SELECT 'dummy'"
|
|
+ " FROM prs_perslid p"
|
|
+ " , prs_v_afdeling_boom d"
|
|
+ extraInf.fromstr
|
|
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
|
|
+ filtClause
|
|
+ extraInf.wherestr;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof)
|
|
{
|
|
oRs.Close(); // close the recordset
|
|
return; // Er zijn geen waarden
|
|
}
|
|
oRs.Close(); // At this point there is always 1 open recordSet named oRs
|
|
}
|
|
if (!(params.perslidKey && params.perslidKey > 0) && params.readonly && params.suppressEmpty) return;
|
|
|
|
var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty : (params.readonly ? L("lcl_select_readonly") : L("lcl_select_persoon")));
|
|
var lperslidName = "";
|
|
|
|
var lextraInit = "";
|
|
var isBad = false;
|
|
|
|
// FSN#41607: prevents urlAdd["disc_key"] from ending up in the queryUrl
|
|
var urldiscKey = (params.disc_key && !isNaN(params.disc_key)) ? params.disc_key : false;
|
|
|
|
if (params.perslidKey && params.addfixedoption && params.perslidKey == params.addfixedoption.key)
|
|
{
|
|
lperslidName = params.addfixedoption.txt;
|
|
}
|
|
else if (params.perslidKey && params.perslidKey > 0)
|
|
{
|
|
var filt_params = params; // Bijvoorbeeld params.perslidKey ook meegeven aan getFiltClausePersoon. params.perslidKey kan ook meegegeven worden met urlAdd zodat de waarde uit een veld wordt gehaald;
|
|
if (params.urlAdd)
|
|
{
|
|
for (i in params.urlAdd)
|
|
{
|
|
filt_params[params.urlAdd[i].urlParam] = params.urlAdd[i].init;
|
|
}
|
|
}
|
|
var filtClause = getFiltClausePersoon(params.filtercode, filt_params);
|
|
var extraInf = getExtraInfPersoon(params.extracode);
|
|
// Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij
|
|
|
|
sql = "SELECT " + S("prs_pers_string") + " naam"
|
|
+ extraInf.selectstr
|
|
+ " FROM prs_perslid p"
|
|
+ ", prs_v_afdeling d"
|
|
+ extraInf.fromstr
|
|
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key = " + params.perslidKey
|
|
+ filtClause
|
|
+ extraInf.wherestr;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof) // Misschien (tegenwoordig) uit scope?
|
|
{ // Probeer dan maar zonder extra 'where's
|
|
oRs.Close(); // close the recordset, oRs will be reused
|
|
isBad = true;
|
|
sql = "SELECT " + S("prs_pers_string") + " naam"
|
|
+ extraInf.selectstr
|
|
+ " FROM prs_perslid p"
|
|
+ ", prs_v_afdeling d"
|
|
+ extraInf.fromstr
|
|
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key = " + params.perslidKey;
|
|
var oRs = Oracle.Execute(sql);
|
|
}
|
|
if (isBad && params.noBad)
|
|
{
|
|
isBad = false;
|
|
params.perslidKey = -1;
|
|
}
|
|
else
|
|
{
|
|
lperslidName = oRs("naam").value;
|
|
lextraInit = oRs("extra").value;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
// Bouw de url voor de persoons query op
|
|
var personQueryUrl = rooturl+"/appl/shared/suggest/SuggestPerslid.asp"
|
|
+ ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
|
|
+ (params.perslidKey>0? "&perslidKey=" + params.perslidKey : "") // Kan ook met urlAdd meegegeven worden
|
|
+ (params.extracode? "&extracode=" + params.extracode : "")
|
|
+ (params.filtercode? "&filtcode=" + params.filtercode : "")
|
|
+ (params.preferredKeys? "&prefKeys=" + params.preferredKeys : "")
|
|
+ (urldiscKey? "&disc_key=" + urldiscKey : "");
|
|
if (params.label && !(isMobile && params.readonly)) // die komt vanzelf met de rofield
|
|
{
|
|
if (isMobile) {
|
|
resultstr += "<label class='form-label' for='" + fieldName + "_show'>" + params.label + "</label>";
|
|
} else {
|
|
resultstr += "<tr " + (params.trclass?"class='" + params.trclass + "'" :"") + ">"
|
|
+ "<td class='label'><label class='selector' for='" + fieldName + "_show'>" + params.label + "</label>"
|
|
+ (!params.readonly
|
|
? "<span class='labelextra'><span id='" + fieldName + "_caller' class='details' style='display:none' onmouseover='iface.showCaller(this)' onclick='iface.setCaller(" + objectName+idadd + ")'>" + I("fa-user") + "</span>"
|
|
: "")
|
|
+ (!params.readonly && params.moreinfo
|
|
? "<span class='details' onclick='iface.persoonDetails(\"" + fieldName + "\")'>" + I("fa-info-circle") + "</span>"
|
|
: "")
|
|
+ (!params.readonly
|
|
? "</span>"
|
|
: "")
|
|
+ "</td>"
|
|
+ "<td>";
|
|
}
|
|
}
|
|
|
|
if (params.multi)
|
|
{
|
|
params.onChange = "onChangeMultiPerson"; // Je mag geen eigen onChange hebben
|
|
params.required = false; // Multi mag altijd ook 0 zijn
|
|
}
|
|
|
|
if (params.readonly)
|
|
{
|
|
if (isMobile)
|
|
{
|
|
resultstr += ROFIELD_HTML("fld", params.label, safe.html(lperslidName));
|
|
}
|
|
else
|
|
{
|
|
resultstr += "<span id='" + fieldName + "_show' class='fld readonly" + (params.moreinfo? " details" : "") + "'"
|
|
+ (params.moreinfo? " onclick='iface.persoonDetails(\"" + fieldName + "\", \"" + (params.info || "") + "\")'" : "" ) + ">"
|
|
+ safe.html(lperslidName)
|
|
+ "</span>";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (isMobile)
|
|
{
|
|
resultstr += "<div class='input-icon-wrapper'>";
|
|
}
|
|
resultstr += "<input id='" + fieldName + "_show' class='fld" + (params.required? " required" : "") + (isMobile? MOBILE_UI_CLASSES.input : "") + "' value='" + safe.htmlattr(lperslidName) + "' placeholder='" + safe.htmlattr(lwhenEmpty) + "'"
|
|
+ "sgType='" + sgType +idadd + "'" + (params.onChange? " sgonChange='" + params.onChange + "'" : "") + ">";
|
|
if (isMobile)
|
|
{
|
|
resultstr += "</div>";
|
|
}
|
|
}
|
|
resultstr += "<input type='hidden' id='" + fieldName + "' name='" + fieldName + "' value='" + (params.perslidKey || "") + "'>";
|
|
|
|
if (params.extraParamField)
|
|
{ /* het extra parameter veld wordt door suggest object gevuld */
|
|
resultstr += "<input type='hidden' id='" + params.extraParamField + "' name='" + params.extraParamField + "' value='" + safe.htmlattr(lextraInit) + "'>";
|
|
}
|
|
if (params.label)
|
|
{
|
|
resultstr += "</td>"
|
|
+ "</tr>";
|
|
|
|
}
|
|
if (!params.readonly)
|
|
{
|
|
if (params.urlAdd)
|
|
{
|
|
var urlAddTxt = "[";
|
|
for (var i = 0; i < params.urlAdd.length; i++)
|
|
{
|
|
urlAddTxt += (i > 0? ", " : "") + "{ urlParam: \"" + params.urlAdd[i].urlParam + "\", field: \"" + params.urlAdd[i].field + "\" }";
|
|
}
|
|
urlAddTxt += "]"
|
|
}
|
|
|
|
resultstr += "<script type='text/javascript'>"
|
|
+ " $(function()"
|
|
+ " {"
|
|
+ objectName + idadd + " = new Suggest({ objectName: '" + objectName + idadd + "',"
|
|
+ " sgType: '" + sgType + idadd + "',"
|
|
+ " queryField: $('#" + fieldName + "_show')[0],"
|
|
+ " queryUrl: '" + personQueryUrl + "',"
|
|
+ " icon: 'fa-user',"
|
|
+ " initKey: " + (params.perslidKey? params.perslidKey : -1) + ","
|
|
+ " noJustOne: true," // Controleer niet of er maar één waarde is die geselecteerd moet worden.
|
|
+ " keyField: $('#" + fieldName + "')[0]"
|
|
+ (params.multitoggle? ", multitoggle: true" : "")
|
|
+ (params.urlAdd? ", urlAdd: " + urlAddTxt : "")
|
|
+ (params.extraParamField? ", extraParamField: " + "$(\"#" + params.extraParamField + "\")[0]" + "": "")
|
|
+ (params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": "")
|
|
+ (params.isBad? ", isBad: true": "")
|
|
+ (params.readonly? ", fieldReadonly: true": "")
|
|
+ (params.embedded? ", embedded: true": "")
|
|
+ (params.addfixedoption? ", addfixedoption: JSON.parse('" + safe.jsstring(JSON.stringify(params.addfixedoption)) + "')": "")
|
|
//+ " , highlightDescript: true"
|
|
+ " });"
|
|
+ " if (FcltMgr.getCaller())"
|
|
+ " $('#" + fieldName + "_caller').show();"
|
|
+ (isBad
|
|
? objectName + idadd + ".isBad();"
|
|
: "")
|
|
+ (params.hidden
|
|
? objectName + idadd + ".makeHidden();"
|
|
: "")
|
|
+ " });";
|
|
|
|
if (params.multi)
|
|
{
|
|
resultstr += "function onChangeMultiPerson(key, naam)"
|
|
+ "{"
|
|
+ " if (key < 0)"
|
|
+ " return;"
|
|
+ objectName + ".setValue(-1, '');" // Wissen en zorgen dat hij in de volgende telling niet meekomt
|
|
+ " if ($('input[name=" + fieldName + "][value=' + key + ']').length)" // Hij is er al
|
|
+ " return;"
|
|
+ " var inp = $('<input>').attr('type', 'hidden').attr('name', '" + fieldName + "').val(key);"
|
|
+ " var td = $('<td>').text(naam).append(inp).prepend(\"<span onclick='$(this).closest(\\\"tr\\\").remove()'>\" + I('fa-trash') + '</span> ');"
|
|
// var td = $("<td>").text(naam).append(inp).prepend("<span onclick='$(this).closest(\"tr\").remove()'>" + I("fa-trash") + "</span> ");
|
|
+ " var tr = $('<tr><td></td></tr>').append(td);"
|
|
+ " $('input#" + fieldName + "_show').closest('tr').after(tr);"
|
|
+ " FcltMgr.resized();"
|
|
+ "}";
|
|
}
|
|
resultstr += "</script>";
|
|
|
|
}
|
|
return resultstr;
|
|
}
|
|
%> |