Files
Facilitor/APPL/FAC/fac_header.inc
Jos Groot Lipman cad678a9e5 FCLT#61196 Interface toggle beter ondersteunen
svn path=/Website/trunk/; revision=47696
2020-08-10 12:53:00 +00:00

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()] + "&nbsp;" + d.getDate() + "&nbsp;"
+ calendar_names.months[d.getMonth()] + "&nbsp;" + 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>
<%
}
%>