451 lines
16 KiB
HTML
451 lines
16 KiB
HTML
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: fac/fac_header.asp
|
|
Context: iframe vanuit appl/fac/Facilitor.asp
|
|
|
|
*/
|
|
%>
|
|
<!-- #include file="../Shared/persoonselector.inc" -->
|
|
<!-- #include file="../Shared/productsearch.inc" -->
|
|
<%
|
|
FCLTHeader.Requires({ plugins: [], js: [] });
|
|
|
|
// Kijk in welke omgeving we volgens de database zitten,
|
|
// en toon dat prominent als dat niet de productie is.
|
|
var sql = "SELECT COALESCE(fac_version_otap, 'P') otap, "
|
|
+ " fac.getdbversion() dbversion,"
|
|
+ " fac_version_cust, "
|
|
+ " fac_version_schema "
|
|
+ " FROM fac_version";
|
|
var oRs = Oracle.Execute(sql);
|
|
// Dit kan onduidelijke problemen geven met putorders en genexport. Controleer daar hier op.
|
|
if (!oRs("fac_version_cust").Value)
|
|
abort_with_warning("fac_version_cust is niet gezet in de database. Doe dat eerst.");
|
|
|
|
var otap = oRs("otap").value;
|
|
if (otap == "P") otap = "";
|
|
var dbversion = oRs("dbversion").value;
|
|
var schemaversion = oRs("fac_version_schema").Value;
|
|
var facilitorversion = FCLTVersion + "@" + dbversion;
|
|
oRs.Close();
|
|
|
|
// function to deliver admin-tracking button at will
|
|
function admintracking(obj)
|
|
{
|
|
if (user.has("WEB_FACTAB"))
|
|
{
|
|
if (obj && obj.trtd)
|
|
{
|
|
Response.write("<tr onclick='FcltMgr.openDetail(\"appl/fac/fac_admtracking_search.asp\", L(\"lcl_menu_admtracking_search\"))'><td>");
|
|
}
|
|
Response.write("<div id='headerdate' title='" + L("lcl_facilitor_appl") + " " + facilitorversion + "'>" + todayString() + "</div>");
|
|
if (obj && obj.trtd)
|
|
{
|
|
Response.write("</tr></td>");
|
|
}
|
|
}
|
|
}
|
|
|
|
// function to deliver person search at will
|
|
function personsearch(params)
|
|
{
|
|
if (!params || !params.touch)
|
|
{
|
|
var authparams = user.checkAutorisation("WEB_PHSRCH", true);
|
|
%><div id="headersuggest"><%
|
|
// Suggest om een persoon te vinden. Gebruikt de scope van de telefoongids
|
|
if (authparams && authparams.PRSreadlevel < 9)
|
|
{
|
|
FCLTpersoonselector("sName_key", "sgPerson", { perslidKey: -1,
|
|
moreinfo: true,
|
|
no_table: true,
|
|
filtercode: "PHB",
|
|
whenEmpty: L("lcl_select_persoon_generic"),
|
|
onChange: "setGlobalUser",
|
|
autlevel: authparams.PRSreadlevel
|
|
});
|
|
}
|
|
}
|
|
}
|
|
// function to deliver product search at will
|
|
function productsearch(params)
|
|
{
|
|
if (!params || !params.touch)
|
|
{
|
|
if (S("show_header_productsearch"))
|
|
{
|
|
Response.Write("<div id=\"headersearch\">");
|
|
FCLTproductsearch ();
|
|
Response.Write("</div>");
|
|
}
|
|
}
|
|
}
|
|
|
|
// functions to deliver loggedin user info at will
|
|
function loggedinusername()
|
|
{
|
|
Response.write("<div class='username'>" + L("lcl_loggedin_as") + "<span>"+ safe.html(user.naam()) + "</span></div>");
|
|
}
|
|
function loggedinuserlocation()
|
|
{
|
|
Response.write("<div class='userlocation'>" + (user.alg_locatie_key({withcurrent:true})>-1 ? I("fa-map-marker")+(new Locatie(user.alg_locatie_key({withcurrent:true})).locatie_string()) : "") +"</span></div>");
|
|
}
|
|
function avatar()
|
|
{
|
|
var info = user.photoinfo();
|
|
if (info.isDefault)
|
|
{
|
|
var alle_namen = user.naam().split(" ");
|
|
var initialen = alle_namen[0].substring(0,1);
|
|
if (alle_namen.length > 1)
|
|
{
|
|
initialen += alle_namen[alle_namen.length - 1].substring(0,1);
|
|
}
|
|
Response.write("<div class='circle userphoto' title='" + L("lcl_avatardetails") + "'><span class='initials'>" + safe.html(initialen.toUpperCase()) + "</span></div>");
|
|
}
|
|
else
|
|
{
|
|
Response.write("<div class='userphoto' title='" + L("lcl_avatardetails") + "'><img id='photo' class='profile' src='" + safe.htmlattr(info.photopaththumb) + "'></div>");
|
|
}
|
|
}
|
|
|
|
// function to deliver profile menu option at will
|
|
function profilePage()
|
|
{
|
|
Response.write("<tr onclick='myInfo()'><td><div class='profile'><span>" + L("lcl_prs_myprofile") + "</span></div></td></tr>");
|
|
}
|
|
|
|
// function to deliver help menu button at will
|
|
function helppage()
|
|
{
|
|
if (S("helppage_url") != "") {
|
|
Response.write("<div id='headerhelp' onclick='openHelp()' title='"+L("lcl_help")+"'>" + '<span class="fa-stack"><i class="fa fa-circle-o fa-stack-2x"></i><i class="fa fa-question fa-stack-1x"></i></span>' + "</div>");
|
|
}
|
|
}
|
|
|
|
// function to deliver language toggle buttons at will
|
|
function langtoggle()
|
|
{
|
|
if (S("language_toggles").length > 1)
|
|
{
|
|
Response.write("<tr><td><div id='langtoggle'>");
|
|
for (lang in S("language_toggles"))
|
|
{
|
|
var code = S("language_toggles")[lang];
|
|
var desc = lcl.languages[code];
|
|
Response.write("<img onClick='changeLanguage(\"" + code + "\")'; title='" + safe.htmlattr(desc) + "' src=../pictures/"+ code + ".png>");
|
|
}
|
|
Response.write("</div></td></tr>");
|
|
}
|
|
}
|
|
|
|
// function to change the interface at will
|
|
function toggleInterface()
|
|
{
|
|
if (S("interface_toggles")){
|
|
Response.write("<tr><td onClick='loadToggleInterface()'><div id='loadToggleInterface'>");
|
|
Response.write("<div>" + L("lcl_prs_toggle_interface") + "</div>");
|
|
Response.write("</div></td></tr>");
|
|
}
|
|
}
|
|
|
|
// function to deliver logoff button at will
|
|
function headerlogout()
|
|
{
|
|
Response.write("<tr onclick='logOff()'><td><div id='headerlogout'>" + I("fa-sign-out") + L("lcl_logoff") + "</div></td></tr>");
|
|
}
|
|
|
|
// function to deliver touch2mobile button at will
|
|
function touch2mobile(params)
|
|
{
|
|
if (params && params.touch && S("mobile_enabled") == 1) // we voorkomen nu nog dat je via desktop naar Mobile gaat; touch-only
|
|
{
|
|
Response.write("<div id='touch2mobile' onclick='toMobile(); window.localStorage.setItem(`interface`, `mobile`);'" + I("fa-mobile") + L("lcl_mobile_mobilemode") + "</div>");
|
|
}
|
|
}
|
|
|
|
// function to deliver touch2desktop button at will
|
|
function touch2desktop(params)
|
|
{
|
|
if (params && params.touch) // touch-only
|
|
{
|
|
if(device.isTouch || device.isDesktop) {
|
|
Response.write("<div id='touch2desktop' onclick='toDesktop(); window.localStorage.setItem(`interface`, `desktop`);'>" + I("fa-desktop") + L("lcl_desktop_classicmode") + "</div>");
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// function to deliver touchsearch button at will
|
|
function touchsearch(params)
|
|
{
|
|
if (params && params.touch)
|
|
{
|
|
Response.write("<div id='touchsearch' onclick='toProdsearch()'>" + I("fa-search") + L("lcl_menu_fe_search") + "</div>");
|
|
}
|
|
}
|
|
|
|
function todayString() {
|
|
var d=new Date()
|
|
|
|
return calendar_names.days[d.getDay()] + " " + d.getDate() + " "
|
|
+ calendar_names.months[d.getMonth()] + " " + d.getFullYear();
|
|
}
|
|
|
|
function generateHeader()
|
|
{
|
|
%>
|
|
<script type="text/javascript">
|
|
function setGlobalUser (prs_key, prs_naam) {
|
|
FcltMgr.setCaller({prs_key: prs_key, prs_naam: prs_naam});
|
|
if (prs_key > 0)
|
|
FcltMgr.openDetail("appl/fac/fac_user.asp?prs_key=" + prs_key);
|
|
}
|
|
<%
|
|
// Stukje meta consistentie controle op invalid objecten. Geeft regelmatig problemen
|
|
// nadat ergens een dump is ververst.
|
|
if (user.has("WEB_FACTAB"))
|
|
{
|
|
var sql = "SELECT COUNT(*) cnt"
|
|
+ " FROM user_objects"
|
|
+ " WHERE status <> 'VALID'";
|
|
var oRs = Oracle.Execute(sql);
|
|
var cnt = oRs("cnt").Value;
|
|
oRs.Close();
|
|
if (cnt > 0)
|
|
{ // probeer het automatisch op te lossen.
|
|
__DoLog("Detected {0} invalid object(s)\nCalling DBMS_UTILITY.COMPILE_SCHEMA".format(cnt), "#f88");
|
|
Oracle.Execute("BEGIN DBMS_UTILITY.COMPILE_SCHEMA(USER, FALSE); END;");
|
|
// De LISTAGG kan er uit klappen als hij langer dan 4000 karakters wordt.
|
|
// Dan heb je *zo* veel niet compileerbare invalid objecten dat je wel grotere problemen hebt denk ik.
|
|
var sql = "SELECT COUNT(*) cnt, "
|
|
+ " LISTAGG(object_type || ' ' || object_name, CHR(13) || CHR(10)) WITHIN GROUP (ORDER BY object_name) objs"
|
|
+ " FROM user_objects"
|
|
+ " WHERE status <> 'VALID'";
|
|
oRs = Oracle.Execute(sql);
|
|
var cnt2 = oRs("cnt").Value;
|
|
var objs = oRs("objs").Value;
|
|
oRs.Close();
|
|
var txt = "Detected {0} invalid database object(s) in {1}@{2}.".format(cnt, Oracle.RealConnection.Properties("User Name"), Oracle.RealConnection.Properties("Data Source Name"));
|
|
__DoLog("After compiling {0} invalid object(s) left:\n{1}".format(cnt2, objs||""), cnt2>0?"#f00":null);
|
|
if (cnt2 == 0)
|
|
txt += "\nAn automatic recompile solved that for you.";
|
|
else
|
|
{
|
|
if (cnt2 == cnt)
|
|
txt += "\nAn automatic recompile did not help.";
|
|
else
|
|
txt += "\nAfter automatic recompiling there are still {0} invalid objects remaining".format(cnt2);
|
|
if (cnt2 < 10) // De logging heeft eventueel de hele lijst
|
|
txt += "<div style='margin-left:1em'>{0}</div>".format(safe.html(objs));
|
|
txt = txt + "\nClick to <button onclick='show_errors()'>view all errors</button>";
|
|
}
|
|
%>
|
|
function show_errors()
|
|
{
|
|
FcltMgr.openDetail("appl/mgt/mgt_genericsql.asp?autoexec=1&sql=SELECT%20*%20FROM%20USER_ERRORS%20ORDER%20BY%20NAME,TYPE,SEQUENCE", 'Errors');
|
|
}
|
|
$(function () { FcltMgr.alert("<%=safe.jsstring(txt.replace(/\n/g,'<br>'))%>", { ishtmlsafe: true }) });
|
|
<%
|
|
}
|
|
}
|
|
|
|
if (S("puo_loglevel") > 1 && Application("otap_environment") != "O" && user.has("WEB_FACTAB"))
|
|
{
|
|
%>
|
|
$(function () { $.toast({ text: "<%="Warning: puo_loglevel={0}".format(S("puo_loglevel"))%>", icon: "warning", position : 'top-left'}); });
|
|
<%
|
|
}
|
|
if (Application("otap_environment") == "O" || __Logging > 0)
|
|
{%>
|
|
function startLogging(silent)
|
|
{
|
|
if (!silent)
|
|
$.toast({ text: "Logging is now on", icon: "success", position : 'top-left'});
|
|
$("#loggingon").hide();
|
|
$("#loggingoff,#loggingshow").show();
|
|
}
|
|
function stopLogging()
|
|
{
|
|
$.post("../shared/wislog.asp?logging=0");
|
|
$.toast({ text: "Logging is now off", icon: "success", position : 'top-left'});
|
|
$("#loggingoff,#loggingshow").hide();
|
|
$("#loggingon").show();
|
|
}
|
|
<%
|
|
if (__Logging > 0)
|
|
Response.Write("$(function() {startLogging(true) });");
|
|
}
|
|
%>
|
|
</script>
|
|
|
|
<div id="headerblok" style='height:100%'>
|
|
<%
|
|
if (Application("otap_environment") == "O" || __Logging > 0)
|
|
{%>
|
|
<div id="loggers">
|
|
<button id='loggingoff' onclick='stopLogging()'>Stop logging</button>
|
|
<a href='../shared/wislog.asp?logging=1' target='_blank'><button id='loggingon' onclick='startLogging()'>Start logging</button></a>
|
|
<% if (Application("otap_environment") == "O") { %>
|
|
<a href='./fac_StreamFile.asp?logger=0' target='_blank'><button id='loggingshow'>Open logging</button></a>
|
|
<% } %>
|
|
</div>
|
|
<%
|
|
}
|
|
if (Session("org_user_key") > 0)
|
|
{
|
|
var other_key = parseInt(Session("org_user_key"), 10);
|
|
var other = new Perslid(other_key);
|
|
Response.Write("<div id='userimperson'>" + L("lcl_impersonate_active").format(safe.html(other.naam()) + "</div>"));
|
|
}
|
|
else if (L("lcl_facilitor_header_prefix") || otap)
|
|
Response.Write("<div id='headerprefix'>" + otap+" "+L("lcl_facilitor_header_prefix") + "</div>");
|
|
|
|
if (user_key != -1) {
|
|
|
|
|
|
if (parseInt(schemaversion,10) < parseInt(FCLTMinDatabaseSchema,10))
|
|
{
|
|
if (user.has("WEB_FACTAB"))
|
|
Response.Write("<div id='badschema' title='"+Oracle.RealConnection.Properties("User Name")+'@'+Oracle.RealConnection.Properties("Data source")+"'>BAD SCHEMA. Need DB"+FCLTMinDatabaseSchema+" have DB"+schemaversion+"</div>");
|
|
// else: gewone users niet direct lastigvallen.
|
|
// tijdens een (nieuw ingrijpende) hot-upgrade staan we het gewoon eventjes toe.
|
|
}
|
|
|
|
generateHeaderFunctions();
|
|
}
|
|
%></div>
|
|
<%
|
|
}
|
|
function generateHeaderFunctions (params)
|
|
{
|
|
%>
|
|
<script type="text/javascript">
|
|
|
|
function openHelp()
|
|
{
|
|
if (FcltMgr._pageManager.name == "tabbedManager")
|
|
var src = FcltMgr._pageManager._activeTab().src;
|
|
else
|
|
src = window.location.href;
|
|
|
|
var url = 'appl/fac/help.asp?url='+escape(src);
|
|
if (<%=S("help_window")?"false":"true"%>)
|
|
FcltMgr.openDetail(url,'<%=L("lcl_help")%>');
|
|
else
|
|
FcltMgr.windowopen('../../'+url);
|
|
}
|
|
|
|
function myInfo()
|
|
{
|
|
FcltMgr.openDetail('appl/fac/fac_user_info.asp?');
|
|
}
|
|
|
|
function toMobile()
|
|
{
|
|
window.localStorage.setItem("interface", "mobile");
|
|
parent.location.href="../../default.asp?interface=mobile";
|
|
}
|
|
|
|
function toDesktop()
|
|
{
|
|
window.localStorage.setItem("interface", "desktop");
|
|
parent.location.href="../../default.asp?interface=desktop";
|
|
}
|
|
|
|
// prodsearch voor touch
|
|
function toProdsearch()
|
|
{
|
|
FcltMgr.openDetail('appl/fac/prodsearch.asp');
|
|
}
|
|
|
|
function logOffCallback(json, textStatus)
|
|
{
|
|
parent.location.href = json.return_url;
|
|
};
|
|
|
|
function logOff()
|
|
{
|
|
var data = {};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("../aut/LogOff.asp",
|
|
data,
|
|
FcltCallbackAndThen(logOffCallback),
|
|
"json");
|
|
}
|
|
|
|
function changeLanguage(lang)
|
|
{
|
|
var data = {};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("./set_language.asp?lang="+lang,
|
|
data,
|
|
FcltCallbackRefresh,
|
|
"json");
|
|
}
|
|
|
|
function loadToggleInterface()
|
|
{
|
|
var current_interface = window.localStorage.getItem("interface");
|
|
window.localStorage.setItem("interface", (current_interface == "touch" ? "touch" : "mobile"));
|
|
var url = rooturl + "?interface=" + (window.localStorage.getItem("interface"));
|
|
window.location.href = url;
|
|
}
|
|
|
|
$(function()
|
|
{
|
|
setTimeout(function () {
|
|
$("#headersearch .productklikker").on('click', function() {
|
|
$("form#p").trigger("submit");
|
|
});
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<div id="headerfunctions">
|
|
<table id="headerfunctionstable">
|
|
<tbody>
|
|
<tr>
|
|
<td><%personsearch(params);%></td>
|
|
<td><%productsearch(params);%></td>
|
|
<td><%helppage();%></td>
|
|
<td><%avatar();%></td>
|
|
<td><%touch2mobile(params);%></td>
|
|
<td><%touch2desktop(params);%></td>
|
|
<td><%touchsearch(params);%></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<!-- USROPTIONS -->
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
$("div.userphoto").on("click", function(e)
|
|
{
|
|
e.stopPropagation();
|
|
$("div#useroptions").toggle();
|
|
});
|
|
$("body").on("click", function(e)
|
|
{
|
|
if ($("div#useroptions").is(":visible"))
|
|
$("div#useroptions").hide();
|
|
});
|
|
});
|
|
</script>
|
|
<div id="useroptions" class="<%=(params && params.touch ? "touch" : "desktop")%>">
|
|
<table id="useroptionstable" style="<%=(params && params.touch ? "margin-top: -88%;" : "")%>">
|
|
<tbody>
|
|
<%profilePage();%>
|
|
<%langtoggle();%>
|
|
<%toggleInterface();%>
|
|
<%admintracking({ trtd: true });%>
|
|
<%headerlogout();%>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<%
|
|
}
|
|
%>
|