/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb; import java.io.IOException; import java.util.Collection; import javax.servlet.http.Cookie; 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.springframework.beans.factory.annotation.Autowired; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.enonic.esl.containers.ExtendedMap; import com.enonic.esl.servlet.http.CookieUtil; import com.enonic.esl.xml.XMLTool; import com.enonic.vertical.engine.MenuAccessRight; import com.enonic.vertical.work.WorkService; import com.enonic.cms.framework.xml.XMLDocument; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.core.DeploymentPathResolver; import com.enonic.cms.core.product.ProductVersion; import com.enonic.cms.core.security.user.User; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.userstore.UserStoreEntity; import com.enonic.cms.core.security.userstore.UserStoreKey; import com.enonic.cms.core.security.userstore.UserStoreXmlCreator; import com.enonic.cms.core.service.AdminService; public class MainMenuServlet extends AdminHandlerBaseServlet { @Autowired private WorkService workService; public void handlerBrowse( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems ) throws VerticalAdminException { int selectedUnitKey = formItems.getInt( "selectedunitkey", -1 ); int selectedMenuKey = formItems.getInt( "selectedmenukey", -1 ); int topCategoryKey = formItems.getInt( "topcategorykey", -1 ); if ( topCategoryKey != -1 ) { selectedUnitKey = admin.getUnitKey( topCategoryKey ); } try { // Get user: User oldUser = securityService.getLoggedInAdminConsoleUser(); UserEntity user = securityService.getUser( oldUser ); Document docSite = XMLTool.domparse( "<sites/>" ); final UserStoreXmlCreator userStoreXmlCreator = new UserStoreXmlCreator( userStoreService.getUserStoreConnectorConfigs() ); Collection<UserStoreEntity> allUsertores = userStoreDao.findAll(); org.jdom.Element userstoresEl = new org.jdom.Element( "userstores" ); for ( UserStoreEntity userStore : allUsertores ) { if ( memberOfResolver.hasUserStoreAdministratorPowers( user, userStore.getKey() ) ) { org.jdom.Element userstoreEl = userStoreXmlCreator.createUserStoreElement( userStore ); userstoresEl.addContent( userstoreEl ); } } XMLDocument userstoresXmlDoc = XMLDocumentFactory.create( new org.jdom.Document( userstoresEl ) ); XMLTool.mergeDocuments( docSite, userstoresXmlDoc.getAsDOMDocument(), true ); if ( topCategoryKey == -1 ) { Cookie c = CookieUtil.getCookie( request, oldUser.getKey() + "topcategorykey" ); if ( c != null ) { topCategoryKey = Integer.parseInt( c.getValue() ); } } if ( selectedMenuKey == -1 ) { Cookie c = CookieUtil.getCookie( request, oldUser.getKey() + "selectedmenukey" ); if ( c != null ) { selectedMenuKey = Integer.parseInt( c.getValue() ); } } if ( selectedMenuKey != -1 ) { session.setAttribute( "selectedmenukey", String.valueOf( selectedMenuKey ) ); } // Hent valgt unit... if ( selectedUnitKey != -1 ) { session.setAttribute( "selectedunitkey", String.valueOf( selectedUnitKey ) ); } else if ( request.getParameter( "chooseunit" ) == null ) { String tmp = (String) session.getAttribute( "selectedunitkey" ); if ( tmp != null ) { selectedUnitKey = Integer.parseInt( tmp ); } if ( selectedUnitKey == -1 ) { Cookie c = CookieUtil.getCookie( request, oldUser.getKey() + "selectedunitkey" ); if ( c != null ) { selectedUnitKey = Integer.parseInt( c.getValue() ); session.setAttribute( "selectedunitkey", String.valueOf( selectedUnitKey ) ); } } } // set selected keys in cookie: String deploymentPath = DeploymentPathResolver.getAdminDeploymentPath( request ); CookieUtil.setCookie( response, oldUser.getKey() + "selectedunitkey", String.valueOf( selectedUnitKey ), -1, deploymentPath ); CookieUtil.setCookie( response, oldUser.getKey() + "selectedmenukey", String.valueOf( selectedMenuKey ), -1, deploymentPath ); CookieUtil.setCookie( response, oldUser.getKey() + "topcategorykey", String.valueOf( topCategoryKey ), -1, deploymentPath ); Element sitesElem = docSite.getDocumentElement(); //Document docUnits = XMLTool.domparse(xmlDataUnits); //Document docResourceTypes = XMLTool.domparse(xmlDataResourceTypes); //XMLTool.mergeDocuments(docSite, docResourceTypes, true); // Get menus for the selected site. Document newMenus = admin.getAdminMenu( oldUser, selectedMenuKey ).getAsDOMDocument(); Element[] menuElems = XMLTool.getElements( newMenus.getDocumentElement() ); for ( int i = 0; i < menuElems.length; i++ ) { int key = Integer.parseInt( menuElems[i].getAttribute( "key" ) ); if ( key == selectedMenuKey ) { Element[] menuItemElems = XMLTool.getElements( menuElems[i] ); Element menuTop = XMLTool.createElement( menuElems[i], "menutop" ); for ( int j = 0; j < menuItemElems.length; j++ ) { XMLTool.moveNode( menuItemElems[j], menuTop ); } MenuAccessRight menuAccessRight = admin.getMenuAccessRight( oldUser, selectedMenuKey ); if ( menuAccessRight.getAdministrate() ) { XMLTool.createElement( menuElems[i], "objects" ); XMLTool.createElement( menuElems[i], "pagetemplates" ); } } } sitesElem.appendChild( docSite.importNode( newMenus.getDocumentElement(), true ) ); // get categories Document categoriesDoc = admin.getCategoryMenu( oldUser, topCategoryKey, null, true ).getAsDOMDocument(); XMLTool.mergeDocuments( docSite, categoriesDoc, true ); if ( resourceAccessResolver.hasAccessToResourceTree( user ) ) { final Element resourcesElem = docSite.createElement( "resources" ); docSite.getDocumentElement().appendChild( resourcesElem ); } DOMSource xmlSource = new DOMSource( docSite ); Source xslSource = AdminStore.getStylesheet( session, "mainmenu.xsl" ); ExtendedMap parameters = new ExtendedMap(); // Disse tre neste linjene må være her! parameters.put( "selectedunitkey", String.valueOf( selectedUnitKey ) ); parameters.put( "selectedmenukey", String.valueOf( selectedMenuKey ) ); parameters.put( "enterprise", ProductVersion.isEnterprise() ); UserStoreKey userStoreKey = userStoreService.getDefaultUserStore().getKey(); if ( userStoreKey != null ) { parameters.put( "defaultuserstorekey", userStoreService.getDefaultUserStore().getKey().toString() ); } addCommonParameters( admin, oldUser, request, parameters, selectedUnitKey, -1 ); addAccessLevelParameters( oldUser, parameters ); String tmp = formItems.getString( "loadmainstartpage", "false" ); if ( tmp != null && tmp.length() > 0 ) { parameters.put( "loadmainstartpage", tmp ); } parameters.put( "scheduler", this.workService.isEnabled() ); transformXML( session, response.getWriter(), xmlSource, xslSource, parameters ); } catch ( TransformerException te ) { String MESSAGE_02 = "Failed to transform XML document: %t"; VerticalAdminLogger.errorAdmin( MESSAGE_02, te ); } catch ( IOException ioe ) { String MESSAGE_03 = "I/O error occured: %t"; VerticalAdminLogger.errorAdmin( MESSAGE_03, ioe ); } } }