/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.dom.DOMSource; import org.w3c.dom.Document; import com.enonic.esl.containers.ExtendedMap; import com.enonic.esl.servlet.http.CookieUtil; import com.enonic.esl.xml.XMLTool; import com.enonic.cms.core.AdminConsoleTranslationService; import com.enonic.cms.core.DeploymentPathResolver; import com.enonic.cms.core.security.user.User; import com.enonic.cms.core.security.userstore.UserStoreKey; import com.enonic.cms.core.security.userstore.connector.config.InvalidUserStoreConnectorConfigException; import com.enonic.cms.core.service.AdminService; public final class NavigatorServlet extends AdminHandlerBaseServlet { private static final int COOKIE_TIMEOUT = 60 * 60 * 24 * 365 * 50; // 50 years public void handlerCustom( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems, String operation ) throws VerticalAdminException { User user = securityService.getLoggedInAdminConsoleUser(); AdminConsoleTranslationService languageMap = AdminConsoleTranslationService.getInstance(); String languageCode = formItems.getString( "lang", null ); if ( languageCode != null ) { String deploymentPath = DeploymentPathResolver.getAdminDeploymentPath( request ); CookieUtil.setCookie( response, "languageCode", languageCode, COOKIE_TIMEOUT, deploymentPath ); session.setAttribute( "languageCode", languageCode ); user.setSelectedLanguageCode( languageCode ); } else { languageCode = (String) session.getAttribute( "languageCode" ); if ( languageCode == null ) { languageCode = languageMap.getDefaultLanguageCode(); } } try { Document doc = XMLTool.createDocument( "data" ); ExtendedMap parameters = new ExtendedMap(); parameters.put( "usergroupkey", user.hasUserGroup() ? user.getUserGroupKey().toString() : null ); parameters.put( "userkey", user.getKey() ); String displayName = user.getDisplayName(); if ( displayName == null ) { displayName = user.getName(); } parameters.put( "userfullname", displayName ); parameters.put( "hasphoto", user.getUserFields().getPhoto() != null ); final UserStoreKey userStoreKey = user.getUserStoreKey(); if ( userStoreKey != null ) { parameters.put( "userstorekey", String.valueOf( userStoreKey ) ); try { parameters.put( "canUpdate", String.valueOf( userStoreService.canUpdateUser( userStoreKey ) ) ); parameters.put( "canUpdatePassword", String.valueOf( userStoreService.canUpdateUserPassword( userStoreKey ) ) ); } catch ( final InvalidUserStoreConnectorConfigException e ) { parameters.put( "userStoreConfigError", e.getMessage() ); } } parameters.put( "languagecode", languageCode ); languageMap.toDoc( doc, languageCode ); DOMSource xmlSource = new DOMSource( doc ); Source xslSource = AdminStore.getStylesheet( session, "navigator.xsl" ); transformXML( session, response.getWriter(), xmlSource, xslSource, parameters ); } catch ( TransformerException e ) { VerticalAdminLogger.errorAdmin( "XSLT error.", e ); } catch ( IOException e ) { VerticalAdminLogger.errorAdmin( "I/O error.", e ); } } }