Skip to content

Instantly share code, notes, and snippets.

@planetsizebrain
Last active January 17, 2016 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save planetsizebrain/3f9788a78224be73d80b to your computer and use it in GitHub Desktop.
Save planetsizebrain/3f9788a78224be73d80b to your computer and use it in GitHub Desktop.
Overridden /html/portlet/dockbar/view.jsp that shows the cluster web server node ID.
<%--
/**
* Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
--%>
<%@ include file="/html/portlet/dockbar/init.jsp" %>
<%
Group group = null;
LayoutSet layoutSet = null;
if (layout != null) {
group = layout.getGroup();
layoutSet = layout.getLayoutSet();
}
boolean hasLayoutCustomizePermission = LayoutPermissionUtil.contains(permissionChecker, layout, ActionKeys.CUSTOMIZE);
boolean hasLayoutUpdatePermission = LayoutPermissionUtil.contains(permissionChecker, layout, ActionKeys.UPDATE);
String toggleControlsState = GetterUtil.getString(SessionClicks.get(request, "liferay_toggle_controls", "visible"));
String toggleClusterState = GetterUtil.getString(SessionClicks.get(request, "liferay_toggle_cluster", "visible"));
%>
<aui:nav-bar cssClass="navbar-static-top dockbar" data-namespace="<%= renderResponse.getNamespace() %>" id="dockbar">
<c:if test="<%= group.isControlPanel() %>">
<%
String controlPanelCategory = themeDisplay.getControlPanelCategory();
String refererGroupDescriptiveName = null;
String backURL = null;
if (themeDisplay.getRefererPlid() > 0) {
Layout refererLayout = LayoutLocalServiceUtil.fetchLayout(themeDisplay.getRefererPlid());
if (refererLayout != null) {
Group refererGroup = refererLayout.getGroup();
if (refererGroup.isUserGroup() && (themeDisplay.getRefererGroupId() > 0)) {
refererGroup = GroupLocalServiceUtil.getGroup(themeDisplay.getRefererGroupId());
refererLayout = new VirtualLayout(refererLayout, refererGroup);
}
refererGroupDescriptiveName = refererGroup.getDescriptiveName(locale);
if (refererGroup.isUser() && (refererGroup.getClassPK() == user.getUserId())) {
if (refererLayout.isPublicLayout()) {
refererGroupDescriptiveName = LanguageUtil.get(pageContext, "my-profile");
}
else {
refererGroupDescriptiveName = LanguageUtil.get(pageContext, "my-dashboard");
}
}
backURL = PortalUtil.getLayoutURL(refererLayout, themeDisplay);
if (!CookieKeys.hasSessionId(request)) {
backURL = PortalUtil.getURLWithSessionId(backURL, session.getId());
}
}
}
if (Validator.isNull(refererGroupDescriptiveName) || Validator.isNull(backURL)) {
refererGroupDescriptiveName = themeDisplay.getAccount().getName();
backURL = themeDisplay.getURLHome();
}
if (Validator.isNotNull(themeDisplay.getDoAsUserId())) {
backURL = HttpUtil.addParameter(backURL, "doAsUserId", themeDisplay.getDoAsUserId());
}
if (Validator.isNotNull(themeDisplay.getDoAsUserLanguageId())) {
backURL = HttpUtil.addParameter(backURL, "doAsUserLanguageId", themeDisplay.getDoAsUserLanguageId());
}
%>
<c:if test="<%= controlPanelCategory.startsWith(PortletCategoryKeys.CURRENT_SITE) || !controlPanelCategory.equals(PortletCategoryKeys.MY) %>">
<div class="brand">
<a class="control-panel-back-link" href="<%= backURL %>" title="<liferay-ui:message key="back" />">
<i class="control-panel-back-icon icon-chevron-sign-left"></i>
<span class="control-panel-back-text helper-hidden-accessible">
<liferay-ui:message key="back" />
</span>
</a>
<h1>
<c:choose>
<c:when test="<%= controlPanelCategory.startsWith(PortletCategoryKeys.CURRENT_SITE) %>">
<%@ include file="/html/portal/layout/view/control_panel_site_selector.jspf" %>
<span class="divider">/</span>
<span class="site-administration-title">
<liferay-ui:message key="site-administration" />
</span>
</c:when>
<c:otherwise>
<a href="<%= themeDisplay.getURLControlPanel() %>">
<liferay-ui:message key="control-panel" />
</a>
</c:otherwise>
</c:choose>
</h1>
</div>
</c:if>
</c:if>
<%
String controlPanelCategory = themeDisplay.getControlPanelCategory();
%>
<c:if test="<%= !(group.isControlPanel() && controlPanelCategory.startsWith(PortletCategoryKeys.CURRENT_SITE)) %>">
<aui:nav collapsible="<%= true %>" cssClass="nav-navigation" icon="reorder" id="navSiteNavigation">
<c:if test="<%= group.isControlPanel() && !controlPanelCategory.equals(PortletCategoryKeys.MY) && !controlPanelCategory.startsWith(PortletCategoryKeys.CURRENT_SITE) %>">
<%
String[] categories = PortletCategoryKeys.ALL;
for (String curCategory : categories) {
String urlControlPanelCategory = HttpUtil.setParameter(themeDisplay.getURLControlPanel(), "controlPanelCategory", curCategory);
String cssClass = StringPool.BLANK;
String iconCssClass = StringPool.BLANK;
if (curCategory.equals(PortletCategoryKeys.APPS)) {
cssClass = "control-panel-apps";
iconCssClass = "icon-th";
}
else if (curCategory.equals(PortletCategoryKeys.CONFIGURATION)) {
cssClass = "control-panel-configuration";
iconCssClass = "icon-cog";
}
else if (curCategory.equals(PortletCategoryKeys.SITES)) {
cssClass = "control-panel-sites";
iconCssClass = "icon-globe";
}
else if (curCategory.equals(PortletCategoryKeys.USERS)) {
cssClass = "control-panel-users";
iconCssClass = "icon-user";
}
%>
<c:if test="<%= _hasPortlets(curCategory, themeDisplay) %>">
<aui:nav-item anchorId='<%= "controlPanelNav" + curCategory + "Link" %>' cssClass="<%= cssClass %>" href="<%= urlControlPanelCategory %>" iconCssClass="<%= iconCssClass %>" label='<%= "category." + curCategory %>' selected="<%= controlPanelCategory.equals(curCategory) %>" />
</c:if>
<%
}
%>
</c:if>
</aui:nav>
</c:if>
<%
boolean userSetupComplete = user.isSetupComplete();
boolean portalMessageUseAnimation = GetterUtil.getBoolean(PortalMessages.get(request, PortalMessages.KEY_ANIMATION), true);
boolean hasLayoutAddPermission = false;
if (layout.getParentLayoutId() == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
hasLayoutAddPermission = GroupPermissionUtil.contains(permissionChecker, group.getGroupId(), ActionKeys.ADD_LAYOUT);
}
else {
hasLayoutAddPermission = LayoutPermissionUtil.contains(permissionChecker, layout, ActionKeys.ADD_LAYOUT);
}
boolean showAddControls = hasLayoutAddPermission || hasLayoutUpdatePermission || (layoutTypePortlet.isCustomizable() && layoutTypePortlet.isCustomizedView() && hasLayoutCustomizePermission);
boolean showEditControls = themeDisplay.isShowLayoutTemplatesIcon() || themeDisplay.isShowPageSettingsIcon();
boolean showPreviewControls = hasLayoutUpdatePermission || GroupPermissionUtil.contains(permissionChecker, group.getGroupId(), ActionKeys.PREVIEW_IN_DEVICE);
boolean showToggleControls = (!group.hasStagingGroup() || group.isStagingGroup()) && (hasLayoutUpdatePermission || (layoutTypePortlet.isCustomizable() && layoutTypePortlet.isCustomizedView() && hasLayoutCustomizePermission) || PortletPermissionUtil.hasConfigurationPermission(permissionChecker, themeDisplay.getSiteGroupId(), layout, ActionKeys.CONFIGURATION));
%>
<c:if test="<%= !group.isControlPanel() && userSetupComplete && (showAddControls || showPreviewControls || showEditControls || showToggleControls) %>">
<aui:nav ariaLabel='<%= LanguageUtil.get(pageContext, "layout-controls") %>' collapsible="<%= true %>" cssClass='<%= portalMessageUseAnimation ? "nav-add-controls" : "nav-add-controls nav-add-controls-notice" %>' icon="pencil" id="navAddControls">
<c:if test="<%= showAddControls %>">
<portlet:renderURL var="addURL" windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>">
<portlet:param name="struts_action" value="/dockbar/add_panel" />
<portlet:param name="stateMaximized" value="<%= String.valueOf(themeDisplay.isStateMaximized()) %>" />
<portlet:param name="viewEntries" value="<%= Boolean.TRUE.toString() %>" />
</portlet:renderURL>
<aui:nav-item anchorId="addPanel" cssClass="site-add-controls" data-panelURL="<%= addURL %>" href="javascript:;" iconCssClass="icon-plus" label="add" />
</c:if>
<c:if test="<%= showPreviewControls %>">
<portlet:renderURL var="previewContentURL" windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>">
<portlet:param name="struts_action" value="/dockbar/preview_panel" />
</portlet:renderURL>
<aui:nav-item anchorId="previewPanel" cssClass="page-preview-controls" data-panelURL="<%= previewContentURL %>" href="javascript:;" iconCssClass="icon-desktop" label="preview" />
</c:if>
<c:if test="<%= showEditControls %>">
<portlet:renderURL var="editLayoutURL" windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>">
<portlet:param name="struts_action" value="/dockbar/edit_layout_panel" />
<portlet:param name="closeRedirect" value="<%= PortalUtil.getLayoutURL(layout, themeDisplay) %>" />
<portlet:param name="selPlid" value="<%= String.valueOf(plid) %>" />
</portlet:renderURL>
<aui:nav-item anchorId="editLayoutPanel" cssClass="page-edit-controls" data-panelURL="<%= editLayoutURL %>" href="javascript:;" iconCssClass="icon-edit" label="edit" />
</c:if>
<c:if test="<%= PropsValues.WEB_SERVER_DISPLAY_NODE %>">
<aui:nav-item cssClass="toggle-cluster-link" iconCssClass="icon-map-marker" />
</c:if>
<c:if test="<%= showToggleControls %>">
<aui:nav-item anchorCssClass="toggle-controls-link" cssClass="toggle-controls" iconCssClass='<%= "controls-state-icon " + (toggleControlsState.equals("visible") ? "icon-eye-open" : "icon-eye-close") %>' id="toggleControls" />
</c:if>
</aui:nav>
</c:if>
<%@ include file="/html/portlet/dockbar/view_user_panel.jspf" %>
</aui:nav-bar>
<div class="dockbar-messages" id="<portlet:namespace />dockbarMessages">
<div class="header"></div>
<div class="body"></div>
<div class="footer"></div>
</div>
<%
List<LayoutPrototype> layoutPrototypes = LayoutPrototypeServiceUtil.search(company.getCompanyId(), Boolean.TRUE, null);
%>
<c:if test="<%= !layoutPrototypes.isEmpty() %>">
<div class="html-template" id="layoutPrototypeTemplate">
<ul class="unstyled">
<%
for (LayoutPrototype layoutPrototype : layoutPrototypes) {
%>
<li>
<a href="javascript:;">
<label>
<input name="template" type="radio" value="<%= layoutPrototype.getLayoutPrototypeId() %>" /> <%= HtmlUtil.escape(layoutPrototype.getName(user.getLanguageId())) %>
</label>
</a>
</li>
<%
}
%>
</ul>
</div>
</c:if>
<style type="text/css">
.popover, .aui .popover.right .arrow {
z-index: 1000 !important;
}
</style>
<%
StringBuilder nodeInfo = new StringBuilder();
nodeInfo.append("<ul>");
nodeInfo.append("<li>Host: " + PortalUtil.getComputerName() + "</li>");
nodeInfo.append("<li>ID: " + com.liferay.portal.kernel.cluster.ClusterExecutorUtil.getLocalClusterNode().getClusterNodeId() + "</li>");
nodeInfo.append("<li>IP: " + com.liferay.portal.kernel.cluster.ClusterExecutorUtil.getLocalClusterNode().getInetAddress() + "</li>");
nodeInfo.append("</ul>");
%>
<aui:script position="inline" use="liferay-dockbar,aui-popover">
Liferay.Dockbar.init('#<portlet:namespace />dockbar');
var customizableColumns = A.all('.portlet-column-content.customizable');
if (customizableColumns.size() > 0) {
customizableColumns.get('parentNode').addClass('customizable');
}
// Add cluster node ID
var trigger = A.one('.toggle-cluster-link');
if (trigger != null) {
var popover = new A.Popover(
{
align: {
node: trigger,
points:[A.WidgetPositionAlign.LC, A.WidgetPositionAlign.RC]
},
bodyContent: '<%= nodeInfo %>',
//headerContent: 'Header content',
position: 'right',
visible: false
}
).render();
trigger.on(
'click',
function() {
popover.set('visible', !popover.get('visible'));
}
);
A.one('body').on(
'key',
function() {
// https://twitter.com/juanferrub/status/138589148805206017
// http://yuilibrary.com/yui/docs/event/key.html
// http://keycode.info/
popover.set('visible', !popover.get('visible'));
},
'down:78+shift'
);
}
</aui:script>
<%!
private boolean _hasPortlets(String category, ThemeDisplay themeDisplay) throws SystemException {
List<Portlet> portlets = PortalUtil.getControlPanelPortlets(category, themeDisplay);
if (portlets.isEmpty()) {
return false;
}
return true;
}
%>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment