/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.Hashtable;
import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
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.containers.MultiValueMap;
import com.enonic.esl.util.ParamsInTextParser;
import com.enonic.esl.xml.XMLTool;
import com.enonic.vertical.engine.AccessRight;
import com.enonic.vertical.engine.VerticalEngineException;
import com.enonic.cms.core.portal.cache.PageCache;
import com.enonic.cms.core.portal.cache.PageCacheService;
import com.enonic.cms.core.resource.ResourceKey;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.security.user.UserEntity;
import com.enonic.cms.core.service.AdminService;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.SiteXmlCreator;
public final class PresentationLayerServlet
extends AdminHandlerBaseServlet
{
private PageCacheService pageCacheService;
private static final String DEFAULT_LOCALIZATIONRESOURCE_FORMITEM = "defaultlocalizationresource";
private static final String DEVICECLASSRESOLVER_FORMITEM = "deviceclassresolver";
private static final String LOCALRESOLVER_FORMITEM = "localeresolver";
@Autowired
public void setPageCacheService( PageCacheService value )
{
this.pageCacheService = value;
}
protected Document buildXML( HttpSession session, ExtendedMap formItems )
{
Document doc = XMLTool.createDocument( "menu" );
Element rootElem = doc.getDocumentElement();
XMLTool.createElement( doc, rootElem, "name", formItems.getString( "name" ) );
rootElem.setAttribute( "key", formItems.getString( "menukey" ) );
if ( formItems.containsKey( "runas" ) )
{
rootElem.setAttribute( "runas", formItems.getString( "runas" ) );
}
if ( formItems.containsKey( "pathtopublichome" ) )
{
rootElem.setAttribute( "pathtopublichome", formItems.getString( "pathtopublichome" ) );
}
if ( formItems.containsKey( "pathtohome" ) )
{
rootElem.setAttribute( "pathtohome", formItems.getString( "pathtohome" ) );
}
rootElem.setAttribute( "languagekey", formItems.getString( "languagekey" ) );
rootElem.setAttribute( "debug", "on" );
Element detailsElem = XMLTool.createElement( doc, rootElem, "details" );
Element virtualhostElem = XMLTool.createElement( doc, detailsElem, "virtualhost" );
if ( formItems.containsKey( "virtualhost" ) )
{
String virtualHost = formItems.getString( "virtualhost" );
XMLTool.createTextNode( doc, virtualhostElem, virtualHost );
}
Element contextpathElem = XMLTool.createElement( doc, detailsElem, "contextpath" );
if ( formItems.containsKey( "contextpath" ) )
{
String contextPath = formItems.getString( "contextpath" );
if ( contextPath.startsWith( "/" ) )
{
contextPath = contextPath.substring( 1 );
}
XMLTool.createTextNode( doc, contextpathElem, contextPath );
}
Element statisticsElem = XMLTool.createElement( doc, detailsElem, "statistics" );
if ( formItems.containsKey( "statistics" ) )
{
String statisticsURL = formItems.getString( "statistics" );
XMLTool.createTextNode( doc, statisticsElem, statisticsURL );
}
// caching:
Element menudataElem = XMLTool.createElement( doc, rootElem, "menudata" );
Element pageTypesElem = XMLTool.createElement( doc, menudataElem, "pagetypes" );
if ( formItems.containsKey( "allow_url" ) )
{
XMLTool.createElement( doc, pageTypesElem, "allow" ).setAttribute( "type", "url" );
}
if ( formItems.containsKey( "allow_label" ) )
{
XMLTool.createElement( doc, pageTypesElem, "allow" ).setAttribute( "type", "label" );
}
if ( formItems.containsKey( "allow_section" ) )
{
XMLTool.createElement( doc, pageTypesElem, "allow" ).setAttribute( "type", "section" );
}
// default css
if ( formItems.containsKey( "csskey" ) )
{
Element defaultCSSElem = XMLTool.createElement( doc, menudataElem, "defaultcss" );
defaultCSSElem.setAttribute( "key", formItems.getString( "csskey" ) );
}
// DeviceClassResolver
if ( formItems.containsKey( DEVICECLASSRESOLVER_FORMITEM ) )
{
Element deviceClassResolver = XMLTool.createElement( doc, rootElem, DEVICECLASSRESOLVER_FORMITEM );
deviceClassResolver.setAttribute( "key", formItems.getString( DEVICECLASSRESOLVER_FORMITEM ) );
}
// Default Localization Resrouce
if ( formItems.containsKey( DEFAULT_LOCALIZATIONRESOURCE_FORMITEM ) )
{
Element defaultLocalizationResource = XMLTool.createElement( doc, rootElem, DEFAULT_LOCALIZATIONRESOURCE_FORMITEM );
defaultLocalizationResource.setAttribute( "key", formItems.getString( DEFAULT_LOCALIZATIONRESOURCE_FORMITEM ) );
}
// Locale Resolver
if ( formItems.containsKey( LOCALRESOLVER_FORMITEM ) )
{
Element defaultLocalizationResource = XMLTool.createElement( doc, rootElem, LOCALRESOLVER_FORMITEM );
defaultLocalizationResource.setAttribute( "key", formItems.getString( LOCALRESOLVER_FORMITEM ) );
}
return doc;
}
public void handlerBrowse( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException
{
User user = securityService.getLoggedInAdminConsoleUser();
SiteKey siteKey = new SiteKey( formItems.getInt( "menukey" ) );
SiteEntity site = getSiteEntity( siteKey );
String menuDataXML = getMenuDataXML( site );
try
{
Document doc = XMLTool.domparse( menuDataXML );
DOMSource xmlSource = new DOMSource( doc );
// Stylesheet
Source xslSource = AdminStore.getStylesheet( session, "site.xsl" );
// Parameters
addCommonParameters( admin, user, request, formItems, -1, siteKey.toInt() );
addAccessLevelParameters( user, formItems );
formItems.put( "page", request.getParameter( "page" ) );
// Show button for statistics?
String statisticsPath = this.getServletContext().getRealPath( "/statistics/" + siteKey );
if ( statisticsPath != null && new File( statisticsPath ).exists() )
{
formItems.put( "showstatistics", "true" );
}
else
{
formItems.put( "showstatistics", "false" );
}
formItems.put( "menuadministrate", String.valueOf( admin.getMenuAccessRight( user, siteKey.toInt() ).getAdministrate() ) );
/*ResourceKey publicResourcePath = siteDao.findByKey( siteKey.toInt() ).getPathToPublicResources();
if ( publicResourcePath != null )
{
formItems.put( "resourcePathToPublicHome", publicResourcePath.toString() );
}
ResourceKey internalResourcePath = siteDao.findByKey( siteKey.toInt() ).getPathToResources();
if ( internalResourcePath != null )
{
formItems.put( "resourcePathToHome", internalResourcePath.toString() );
}*/
// add cache settings info
PageCache pageCache = pageCacheService.getPageCacheService( siteKey );
formItems.put( "pageCacheEnabled", pageCache.isEnabled() );
formItems.put( "debugpath", MenuHandlerServlet.getSiteUrl( request, siteKey.toInt() ) );
formItems.put( "defaultCssExist", resourceExists( site.getDefaultCssKey() ) ? "true" : "false" );
formItems.put( "deviceClassResolverExist", resourceExists( site.getDeviceClassResolver() ) ? "true" : "false" );
formItems.put( "defaultLocalizationResourceExist", resourceExists( site.getDefaultLocalizationResource() ) ? "true" : "false" );
formItems.put( "localeResolverExist", resourceExists( site.getLocaleResolver() ) ? "true" : "false" );
UserEntity runAsUser = menuHandler.getRunAsUserForSite( site.getKey() );
formItems.put( "defaultRunAsUser",
runAsUser == null ? "" : runAsUser.getDisplayName() + " (" + runAsUser.getQualifiedName() + ")" );
transformXML( session, response.getWriter(), xmlSource, xslSource, formItems );
}
catch ( IOException ioe )
{
String MESSAGE_20 = "I/O error.";
VerticalAdminLogger.errorAdmin( MESSAGE_20, ioe );
}
catch ( TransformerConfigurationException tce )
{
String MESSAGE_40 = "XSL transformer configuration error.";
VerticalAdminLogger.errorAdmin( MESSAGE_40, tce );
}
catch ( TransformerException te )
{
String MESSAGE_50 = "XSL transformer error.";
VerticalAdminLogger.errorAdmin( MESSAGE_50, te );
}
}
private String getMenuDataXML( SiteEntity site )
{
String menuDataXML;
SiteXmlCreator siteXmlCreator = new SiteXmlCreator( null, menuHandler );
siteXmlCreator.setIncludeSiteURLInfo( true );
siteXmlCreator.setIncludeDeviceClassResolverInfo( true );
siteXmlCreator.setIncludeLocalizationInfo( true );
siteXmlCreator.setIncludePathToPublicHome( true );
siteXmlCreator.setIncludePathToHome( true );
siteXmlCreator.setIncludeRunAs( true );
siteXmlCreator.setIncludeProperties( true );
menuDataXML =
siteXmlCreator.createLegacyGetMenuData( site, sitePropertiesService.getSiteProperties( site.getKey() ) ).getAsString();
return menuDataXML;
}
private SiteEntity getSiteEntity( SiteKey siteKey )
{
SiteEntity site = siteDao.findByKey( siteKey.toInt() );
return site;
}
public void handlerCustom( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems, String operation )
throws VerticalAdminException, VerticalEngineException, MessagingException, IOException
{
User user = securityService.getLoggedInAdminConsoleUser();
if ( "listmenus".equals( operation ) )
{
listMenus( request, response, session, admin, formItems );
}
else if ( "createmenuform".equals( operation ) )
{
createMenuForm( request, response, session, admin, formItems );
}
else if ( "propagateaccessrights".equals( operation ) )
{
handlerPropagateAccessRights( request, response, session, admin, formItems );
}
else if ( "clearcachedpages".equals( operation ) )
{
SiteKey siteKey = new SiteKey( formItems.getInt( "menukey" ) );
PageCache pageCache = pageCacheService.getPageCacheService( siteKey );
pageCache.removePageEntriesBySite();
formItems.put( "feedback", "clearedcachedpages" );
redirect( request, response, formItems );
}
else if ( "clearcachedobjects".equals( operation ) )
{
SiteKey siteKey = new SiteKey( formItems.getInt( "menukey" ) );
PageCache pageCache = pageCacheService.getPageCacheService( siteKey );
pageCache.removePortletWindowEntriesBySite();
formItems.put( "feedback", "clearedcachedobjects" );
redirect( request, response, formItems );
}
else if ( "clearcachedpagesandobjects".equals( operation ) )
{
SiteKey siteKey = new SiteKey( formItems.getInt( "menukey" ) );
PageCache pageCache = pageCacheService.getPageCacheService( siteKey );
pageCache.removeEntriesBySite();
formItems.put( "feedback", "clearedcachedpagesandobjects" );
redirect( request, response, formItems );
}
else if ( "createmenu".equals( operation ) )
{
Document doc = XMLTool.createDocument( "menu" );
Element menuElem = doc.getDocumentElement();
menuElem.setAttribute( "languagekey", formItems.getString( "languagekey" ) );
Element nameElem = XMLTool.createElement( doc, menuElem, "name" );
XMLTool.createTextNode( doc, nameElem, formItems.getString( "name" ) );
XMLTool.createElement( doc, menuElem, "firstpage" );
XMLTool.createElement( doc, menuElem, "loginpage" );
XMLTool.createElement( doc, menuElem, "errorpage" );
Element detailsElem = XMLTool.createElement( doc, menuElem, "details" );
Element virtualhostElem = XMLTool.createElement( doc, detailsElem, "virtualhost" );
if ( formItems.containsKey( "virtualhost" ) )
{
String virtualHost = formItems.getString( "virtualhost" );
XMLTool.createTextNode( doc, virtualhostElem, virtualHost );
}
Element contextpathElem = XMLTool.createElement( doc, detailsElem, "contextpath" );
if ( formItems.containsKey( "contextpath" ) )
{
String contextPath = formItems.getString( "contextpath" );
if ( contextPath.startsWith( "/" ) )
{
contextPath = contextPath.substring( 1 );
}
XMLTool.createTextNode( doc, contextpathElem, contextPath );
}
Element statisticsElem = XMLTool.createElement( doc, detailsElem, "statistics" );
if ( formItems.containsKey( "statistics" ) )
{
String statisticsURL = formItems.getString( "statistics" );
XMLTool.createTextNode( doc, statisticsElem, statisticsURL );
}
// default css
Element menudataElem = XMLTool.createElement( doc, menuElem, "menudata" );
if ( formItems.containsKey( "csskey" ) )
{
Element defaultCSSElem = XMLTool.createElement( doc, menudataElem, "defaultcss" );
defaultCSSElem.setAttribute( "key", formItems.getString( "csskey" ) );
}
admin.createMenu( user, XMLTool.documentToString( doc ) );
redirectClientToAdminPath( formItems.getString( "redirect" ), "reload", "true", request, response );
}
else
{
super.handlerCustom( request, response, session, admin, formItems, operation );
}
}
protected void createMenuForm( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response,
HttpSession session, AdminService admin, ExtendedMap formItems )
throws VerticalAdminException
{
ExtendedMap xslParams = new ExtendedMap();
User user = securityService.getLoggedInAdminConsoleUser();
try
{
Document doc = XMLTool.createDocument( "menulanguages" );
doc.getDocumentElement().appendChild( doc.importNode( admin.getLanguages().getAsDOMDocument().getDocumentElement(), true ) );
Source xslSource = AdminStore.getStylesheet( session, "menu_form.xsl" );
addCommonParameters( admin, user, request, xslParams, -1, -1 );
addAccessLevelParameters( user, xslParams );
xslParams.put( "selecteddomainkey", formItems.getString( "selecteddomainkey", null ) );
DOMSource xmlSource = new DOMSource( doc );
if ( formItems.containsKey( "selectedunitkey" ) )
{
xslParams.put( "selectedunitkey", formItems.getString( "selectedunitkey" ) );
}
xslParams.put( "page", String.valueOf( request.getParameter( "page" ) ) );
String reload = request.getParameter( "reload" );
if ( reload != null && reload.length() > 0 )
{
xslParams.put( "reload", reload );
}
if ( formItems.containsKey( "selectedunitkey" ) )
{
xslParams.put( "selectedunitkey", formItems.get( "selectedunitkey" ) );
}
// Finn ut om brukeren er en enterpriseadmin
boolean isEnterpriseAdmin = user.isEnterpriseAdmin();
boolean isEnterpriseAdminGroupMember = admin.isEnterpriseAdmin( user );
xslParams.put( "enterpriseadmin", ( isEnterpriseAdmin || isEnterpriseAdminGroupMember ? "true" : "false" ) );
transformXML( session, response.getWriter(), xmlSource, xslSource, xslParams );
}
catch ( TransformerException e )
{
VerticalAdminLogger.errorAdmin( "XSLT error: %t", e );
}
catch ( IOException e )
{
VerticalAdminLogger.errorAdmin( "I/O error: %t", e );
}
}
protected void listMenus( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response,
HttpSession session, AdminService admin, ExtendedMap formItems )
throws VerticalAdminException
{
int domainKey = getDomainKey( session );
ExtendedMap xslParams = new ExtendedMap();
User user = securityService.getLoggedInAdminConsoleUser();
try
{
Document doc = admin.getAdminMenu( user, -1 ).getAsDOMDocument();
Source xslSource = AdminStore.getStylesheet( session, "menus_browse.xsl" );
addCommonParameters( admin, user, request, xslParams, -1, -1 );
addAccessLevelParameters( user, xslParams );
xslParams.put( "selecteddomainkey", String.valueOf( domainKey ) );
DOMSource xmlSource = new DOMSource( doc );
if ( formItems.containsKey( "selectedunitkey" ) )
{
xslParams.put( "selectedunitkey", formItems.getString( "selectedunitkey" ) );
}
xslParams.put( "page", String.valueOf( request.getParameter( "page" ) ) );
String reload = request.getParameter( "reload" );
if ( reload != null && reload.length() > 0 )
{
xslParams.put( "reload", reload );
}
if ( formItems.containsKey( "se3lectedunitkey" ) )
{
xslParams.put( "selectedunitkey", formItems.get( "selectedunitkey" ) );
}
addAccessLevelParameters( user, xslParams );
// Finn ut om brukeren er en enterpriseadmin
boolean isEnterpriseAdmin = user.isEnterpriseAdmin();
boolean isEnterpriseAdminGroupMember = admin.isEnterpriseAdmin( user );
xslParams.put( "enterpriseadmin", ( isEnterpriseAdmin || isEnterpriseAdminGroupMember ? "true" : "false" ) );
transformXML( session, response.getWriter(), xmlSource, xslSource, xslParams );
}
catch ( TransformerException e )
{
VerticalAdminLogger.errorAdmin( "XSLT error: %t", e );
}
catch ( IOException e )
{
VerticalAdminLogger.errorAdmin( "I/O error: %t", e );
}
}
public void handlerForm( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException
{
User user = securityService.getLoggedInAdminConsoleUser();
int menuKey = formItems.getInt( "key" );
SiteKey siteKey = new SiteKey( menuKey );
SiteEntity site = getSiteEntity( siteKey );
String menuDataXML = getMenuDataXML( site );
try
{
Document docAccessRights = admin.getAccessRights( user, AccessRight.MENUITEM_DEFAULT, menuKey, true ).getAsDOMDocument();
Document menuDataXMLDoc = XMLTool.domparse( menuDataXML );
Element parent = (Element) XMLTool.selectNode( menuDataXMLDoc.getDocumentElement(), "/menus/menu" );
parent.appendChild( menuDataXMLDoc.importNode( docAccessRights.getDocumentElement(), true ) );
XMLTool.mergeDocuments( menuDataXMLDoc, admin.getLanguages().getAsDOMDocument(), true );
StreamSource xmlSource = new StreamSource( new StringReader( XMLTool.documentToString( menuDataXMLDoc ) ) );
Source xslSource = AdminStore.getStylesheet( session, "site_form.xsl" );
// Parameters
ExtendedMap parameters = new ExtendedMap();
parameters.put( "page", formItems.getString( "page" ) );
parameters.put( "returnop", formItems.getString( "returnop", "browse" ) );
addCommonParameters( admin, user, request, parameters, -1, menuKey );
addAccessLevelParameters( user, parameters );
parameters.put( "defaultCssExist", resourceExists( site.getDefaultCssKey() ) ? "true" : "false" );
parameters.put( "deviceClassResolverExist", resourceExists( site.getDeviceClassResolver() ) ? "true" : "false" );
parameters.put( "pathToPublicHomeExist", resourceExists( site.getPathToPublicResources() ) ? "true" : "false" );
parameters.put( "pathToHomeExist", resourceExists( site.getPathToResources() ) ? "true" : "false" );
transformXML( session, response.getWriter(), xmlSource, xslSource, parameters );
}
catch ( TransformerException te )
{
String message = "Transformer error while transforming XSL: %t";
VerticalAdminLogger.errorAdmin( message, te );
}
catch ( IOException ioe )
{
String message = "I/O error: %t";
VerticalAdminLogger.errorAdmin( message, ioe );
}
}
private boolean resourceExists( ResourceKey key )
{
return key == null ? false : resourceService.getResourceFile( key ) != null;
}
public void handlerUpdate( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException, VerticalEngineException
{
User user = securityService.getLoggedInAdminConsoleUser();
Document doc = buildXML( session, formItems );
String menuDataXML = XMLTool.documentToString( doc );
// access rights:
Element rootElem = doc.getDocumentElement();
if ( formItems.containsKey( "updateaccessrights" ) && !formItems.getString( "propagate", "" ).equals( "true" ) )
{
admin.updateAccessRights( user,
buildAccessRightsXML( rootElem.getAttribute( "key" ), formItems, AccessRight.MENUITEM_DEFAULT ) );
}
admin.updateMenuData( user, menuDataXML );
// Redirect to propagate page
if ( "true".equals( formItems.getString( "propagate" ) ) )
{
handlerPropagateAccessRightsPage( request, response, session, admin, formItems );
}
else
{
redirect( request, response, formItems );
}
}
public void handlerPropagateAccessRightsPage( HttpServletRequest request, HttpServletResponse response, HttpSession session,
AdminService admin, ExtendedMap formItems )
throws VerticalAdminException, VerticalEngineException
{
try
{
User user = securityService.getLoggedInAdminConsoleUser();
int menuItemKey = formItems.getInt( "key", -1 );
int menuKey = formItems.getInt( "menukey", -1 );
Document doc = XMLTool.createDocument( "data" );
Document menuItems = admin.getMenu( user, menuKey, false ).getAsDOMDocument();
Document changedAccessRights = buildChangedAccessRightsXML( formItems );
Document currentAccessRights = XMLTool.domparse( buildAccessRightsXML( formItems ) );
XMLTool.mergeDocuments( doc, menuItems, true );
XMLTool.mergeDocuments( doc, changedAccessRights, true );
XMLTool.mergeDocuments( doc, currentAccessRights, true );
DOMSource xmlSource = new DOMSource( doc );
Source xslSource = AdminStore.getStylesheet( session, "site_propagateaccessrights.xsl" );
// Parameters
ExtendedMap parameters = new ExtendedMap();
addCommonParameters( admin, user, request, parameters, -1, menuKey );
addAccessLevelParameters( user, parameters );
parameters.putInt( "menuitemkey", menuItemKey );
parameters.put( "page", formItems.get( "page" ) );
parameters.putString( "menuitemname", formItems.getString( "name", "" ) );
parameters.putString( "insertbelow", formItems.getString( "insertbelow", "" ) );
parameters.putString( "returnop", formItems.getString( "returnop", "browse" ) );
transformXML( session, response.getWriter(), xmlSource, xslSource, parameters );
}
catch ( TransformerException e )
{
String message = "Failed to transmform XML document: %t";
VerticalAdminLogger.errorAdmin( message, e );
}
catch ( IOException e )
{
String message = "Failed to transmform XML document: %t";
VerticalAdminLogger.errorAdmin( message, e );
}
}
public void handlerPropagateAccessRights( HttpServletRequest request, HttpServletResponse response, HttpSession session,
AdminService admin, ExtendedMap formItems )
throws VerticalAdminException, VerticalEngineException
{
User user = securityService.getLoggedInAdminConsoleUser();
// Lagre accessright til default menuitem uansett!
int menuKey = formItems.getInt( "menukey" );
String accessRightsXML = buildAccessRightsXML( String.valueOf( menuKey ), formItems, AccessRight.MENUITEM_DEFAULT );
// Oppdaterer i db
admin.updateAccessRights( user, accessRightsXML );
// Propagate
String subop = formItems.getString( "subop", "" );
if ( "propagate".equals( subop ) )
{
String applyOnlyChanges = formItems.getString( "applyonlychanges", "off" );
if ( "on".equals( applyOnlyChanges ) )
{
// Prepare for apply only changes..
Hashtable<String, ExtendedMap> removedMenuItemAccessRights = new Hashtable<String, ExtendedMap>();
Hashtable<String, ExtendedMap> addedMenuItemAccessRights = new Hashtable<String, ExtendedMap>();
Hashtable<String, ExtendedMap> modifiedMenuItemAccessRights = new Hashtable<String, ExtendedMap>();
for ( Object o : formItems.keySet() )
{
String paramName = (String) o;
if ( paramName.startsWith( "arc[key=" ) )
{
ExtendedMap paramsInName = ParamsInTextParser.parseParamsInText( paramName, "[", "]", ";" );
String paramValue = formItems.getString( paramName );
ExtendedMap categoryAccessRight = ParamsInTextParser.parseParamsInText( paramValue, "[", "]", ";" );
String diffinfo = categoryAccessRight.getString( "diffinfo" );
if ( "removed".equals( diffinfo ) )
{
removedMenuItemAccessRights.put( paramsInName.getString( "key" ), categoryAccessRight );
}
else if ( "added".equals( diffinfo ) )
{
String groupKey = paramsInName.getString( "key" );
addedMenuItemAccessRights.put( groupKey, categoryAccessRight );
}
else if ( "modified".equals( diffinfo ) )
{
String groupKey = paramsInName.getString( "key" );
modifiedMenuItemAccessRights.put( groupKey, categoryAccessRight );
}
}
}
// Run through each (selected) menuitem...
for ( Object o : formItems.keySet() )
{
String paramName = (String) o;
if ( paramName.startsWith( "chkPropagate[key=" ) )
{
ExtendedMap paramsInName = ParamsInTextParser.parseParamsInText( paramName, "[", "]", ";" );
int curMenuItemKey = Integer.parseInt( paramsInName.getString( "key" ) );
// Apply, only changes
if ( "on".equals( applyOnlyChanges ) )
{
// Henter ud eksisterende accessrights
Document docCurrentCategoryAR =
admin.getAccessRights( user, AccessRight.MENUITEM, curMenuItemKey, true ).getAsDOMDocument();
Element root = docCurrentCategoryAR.getDocumentElement();
Element userright = XMLTool.getElement( root, "userright" );
if ( userright != null )
{
XMLTool.removeChildFromParent( root, userright );
}
// Påfører endringer
Document docChangedCategoryAR =
applyChangesInAccessRights( docCurrentCategoryAR, removedMenuItemAccessRights, modifiedMenuItemAccessRights,
addedMenuItemAccessRights );
// Lagrer
admin.updateAccessRights( user, XMLTool.documentToString( docChangedCategoryAR ) );
}
}
}
}
// Apply accessright as whole
else
{
// Prepare for overwrite accessrights
Document docNewCategoryAccessRights = buildAccessRightsXML( null, null, formItems, AccessRight.MENUITEM );
// Run through each (selected) menuitem...
for ( Object o : formItems.keySet() )
{
String paramName = (String) o;
if ( paramName.startsWith( "chkPropagate[key=" ) )
{
ExtendedMap paramsInName = ParamsInTextParser.parseParamsInText( paramName, "[", "]", ";" );
int curMenuItemKey = Integer.parseInt( paramsInName.getString( "key" ) );
// Apply on current category
Element categoryAccessrighs = docNewCategoryAccessRights.getDocumentElement();
categoryAccessrighs.setAttribute( "key", String.valueOf( curMenuItemKey ) );
admin.updateAccessRights( user, XMLTool.documentToString( docNewCategoryAccessRights ) );
}
}
}
}
// Redirect...
redirect( request, response, formItems );
}
private void redirect( HttpServletRequest request, HttpServletResponse response, ExtendedMap formItems )
throws VerticalAdminException
{
MultiValueMap queryParams = new MultiValueMap();
queryParams.put( "page", formItems.get( "page" ) );
queryParams.put( "op", formItems.get( "returnop", "browse" ) );
queryParams.put( "parentmi", formItems.get( "insertbelow", "-1" ) );
queryParams.put( "menukey", formItems.get( "menukey", "" ) );
queryParams.put( "feedback", formItems.get( "feedback", "" ) );
if ( formItems.containsKey( "reload" ) )
{
queryParams.put( "reload", formItems.get( "reload" ) );
}
redirectClientToAdminPath( "adminpage", queryParams, request, response );
}
public void handlerRemove( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems, int key )
throws VerticalAdminException, VerticalEngineException
{
User user = securityService.getLoggedInAdminConsoleUser();
admin.removeMenu( user, key );
MultiValueMap queryParams = new MultiValueMap();
queryParams.put( "page", formItems.get( "page" ) );
queryParams.put( "op", "listmenus" );
queryParams.put( "parentmi", formItems.get( "insertbelow", "-1" ) );
queryParams.put( "menukey", formItems.get( "key", "" ) );
queryParams.put( "reload", "true" );
redirectClientToAdminPath( "adminpage", queryParams, request, response );
}
public void handlerCopy( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems, User user, int key )
throws VerticalAdminException, VerticalEngineException
{
admin.copyMenu( user, key, true );
MultiValueMap queryParams = new MultiValueMap();
queryParams.put( "page", "851" );
String returnOp = formItems.getString( "returnop", "listmenus" );
queryParams.put( "op", returnOp );
if ( "browse".equals( returnOp ) )
{
queryParams.put( "menukey", String.valueOf( key ) );
}
queryParams.put( "reload", "true" );
redirectClientToAdminPath( "adminpage", queryParams, request, response );
}
}