Author: buscob
Date: Sat Oct 16 06:01:16 2010 New Revision: 1023194 URL: http://svn.apache.org/viewvc?rev=1023194&view=rev Log: - Moved method getPortalPages from ModelMenuItem to the PortalPageWorker. This is a method that generally retrieves all PortalPages that have a common parent. It will be re-used in a next commit. - Added method to the PortalPageWorker to retrieve a PortalPage considering if a private derived copy exists for the current user (will be used in a next commit) - Added method to the PortalPageWorker to check if the current user is allowed to configure a PortalPage. Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/PortalPageWorker.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/PortalPageWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/PortalPageWorker.java?rev=1023194&r1=1023193&r2=1023194&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/PortalPageWorker.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/PortalPageWorker.java Sat Oct 16 06:01:16 2010 @@ -19,14 +19,26 @@ package org.ofbiz.widget; import java.io.IOException; +import java.util.List; import java.util.Map; +import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.UtilMisc; import org.ofbiz.entity.Delegator; +import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.condition.EntityCondition; +import org.ofbiz.entity.condition.EntityOperator; +import org.ofbiz.entity.util.EntityUtil; +import org.ofbiz.service.DispatchContext; +import org.ofbiz.service.ServiceUtil; +import org.ofbiz.security.authz.Authorization; /** * PortalPageWorker Class */ -public class PortalPageWorker implements org.ofbiz.widget.PortalPageWorkerInterface { +public class PortalPageWorker { public static final String module = PortalPageWorker.class.getName(); @@ -37,4 +49,129 @@ public class PortalPageWorker implements return "success"; } + /** + * Returns a list of PortalPages that have the specified parentPortalPageId as parent. + * If a specific PortalPage exists for the current userLogin it is returned instead of the original one. + */ + public static List<GenericValue> getPortalPages(String parentPortalPageId, Map<String, Object> context) { + List<GenericValue> portalPages = null; + if (UtilValidate.isNotEmpty(parentPortalPageId)) { + Delegator delegator = WidgetWorker.getDelegator(context); + try { + // first get public pages + EntityCondition cond = + EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, "_NA_"), + EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS, parentPortalPageId), + EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)), + EntityOperator.OR)), + EntityOperator.AND); + portalPages = delegator.findList("PortalPage", cond, null, null, null, false); + if (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a user is logged in + String userLoginId = ((GenericValue)context.get("userLogin")).getString("userLoginId"); + // replace with private pages + for (GenericValue portalPage : portalPages) { + cond = EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId), + EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, portalPage.getString("portalPageId"))), + EntityOperator.AND); + List <GenericValue> privatePortalPages = delegator.findList("PortalPage", cond, null, null, null, false); + if (UtilValidate.isNotEmpty(privatePortalPages)) { + portalPages.remove(portalPage); + portalPages.add(privatePortalPages.get(0)); + } + } + // add any other created private pages + cond = EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId), + EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, null), + EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)), + EntityOperator.AND); + portalPages.addAll(delegator.findList("PortalPage", cond, null, null, null, false)); + } + portalPages = EntityUtil.orderBy(portalPages, UtilMisc.toList("sequenceNum")); + } catch (GenericEntityException e) { + Debug.logError("Could not retrieve portalpages:" + e.getMessage(), module); + } + } + return portalPages; + } + + /** + * Returns the PortalPage with the specified portalPageId. + * If a specific PortalPage exists for the current userLogin it is returned instead of the original one. + */ + public static GenericValue getPortalPage(String portalPageId, Map<String, Object> context) { + GenericValue portalPage = null; + if (UtilValidate.isNotEmpty(portalPageId)) { + Delegator delegator = WidgetWorker.getDelegator(context); + try { + // Get the current userLoginId + String userLoginId = "_NA_"; + if (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a user is logged in + userLoginId = ((GenericValue)context.get("userLogin")).getString("userLoginId"); + } + + // Get the PortalPage ensuring that it is either owned by the user or a system page + EntityCondition cond = EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS, portalPageId), + EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, "_NA_"), + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId)), + EntityOperator.OR)), + EntityOperator.AND); + List <GenericValue> portalPages = delegator.findList("PortalPage", cond, null, null, null, false); + if (UtilValidate.isNotEmpty(portalPages)) { + portalPage = EntityUtil.getFirst(portalPages); + } + + // If a derived PortalPage private to the user exists, returns this instead of the system one + cond = EntityCondition.makeCondition(UtilMisc.toList( + EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, portalPageId), + EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId)), + EntityOperator.AND); + List <GenericValue> privateDerivedPortalPages = delegator.findList("PortalPage", cond, null, null, null, false); + if (UtilValidate.isNotEmpty(privateDerivedPortalPages)) { + portalPage = EntityUtil.getFirst(privateDerivedPortalPages); + } + } catch (GenericEntityException e) { + Debug.logError("Could not retrieve portalpage:" + e.getMessage(), module); + } + } + return portalPage; + } + + /** + * Checks if the user is allowed to configure the PortalPage. + * PortalPage configuration is allowed if he is the PortalPage owner or he has got the PORTALPAGE_ADMIN permission + */ + public static Boolean userIsAllowedToConfigure(String portalPageId, Map<String, Object> context) { + Boolean userIsAllowed = false; + + if (UtilValidate.isNotEmpty(portalPageId)) { + GenericValue userLogin = (GenericValue) context.get("userLogin"); + if (UtilValidate.isNotEmpty(userLogin)) { + String userLoginId = (String) userLogin.get("userLoginId"); + Authorization authz = (Authorization) context.get("authz"); + + Boolean hasPortalAdminPermission = authz.hasPermission(userLoginId, "PORTALPAGE_ADMIN", context); + try { + Delegator delegator = WidgetWorker.getDelegator(context); + GenericValue portalPage = delegator.findOne("PortalPage", UtilMisc.toMap("portalPageId", portalPageId),false); + + if (UtilValidate.isNotEmpty(portalPage)) { + String ownerUserLoginId = (String) portalPage.get("ownerUserLoginId"); + // Users with PORTALPAGE_ADMIN permission can configure every Portal Page + userIsAllowed = (ownerUserLoginId.equals(userLoginId) || hasPortalAdminPermission); + } + } catch (GenericEntityException e) { + return false; + } + } + } + + return userIsAllowed; + } + } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java?rev=1023194&r1=1023193&r2=1023194&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenuItem.java Sat Oct 16 06:01:16 2010 @@ -47,6 +47,7 @@ import org.ofbiz.entity.condition.Entity import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.entityext.permission.EntityPermissionChecker; import org.ofbiz.widget.WidgetWorker; +import org.ofbiz.widget.PortalPageWorker; import org.w3c.dom.Element; import org.xml.sax.SAXException; @@ -284,24 +285,26 @@ public class ModelMenuItem { ModelMenuAction.runSubActions(this.actions, context); String parentPortalPageId = this.getParentPortalPageId(context); if (UtilValidate.isNotEmpty(parentPortalPageId)) { - List<GenericValue> portalPages = this.getPortalPages(context); - for (GenericValue portalPage : portalPages) { - if (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) { - ModelMenuItem localItem = new ModelMenuItem(this.getModelMenu()); - localItem.name = portalPage.getString("portalPageId"); - localItem.setTitle((String) portalPage.get("portalPageName", locale)); - localItem.link = new Link(this); - List<WidgetWorker.Parameter> linkParams = localItem.link.getParameterList(); - linkParams.add(new WidgetWorker.Parameter("portalPageId", portalPage.getString("portalPageId"), false)); - linkParams.add(new WidgetWorker.Parameter("parentPortalPageId", parentPortalPageId, false)); - if (link != null) { - localItem.link.setTarget(link.targetExdr.getOriginal()); - linkParams.addAll(link.parameterList); - } else { - localItem.link.setTarget("showPortalPage"); + List<GenericValue> portalPages = PortalPageWorker.getPortalPages(parentPortalPageId, context); + if (UtilValidate.isNotEmpty(portalPages)) { + for (GenericValue portalPage : portalPages) { + if (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) { + ModelMenuItem localItem = new ModelMenuItem(this.getModelMenu()); + localItem.name = portalPage.getString("portalPageId"); + localItem.setTitle((String) portalPage.get("portalPageName", locale)); + localItem.link = new Link(this); + List<WidgetWorker.Parameter> linkParams = localItem.link.getParameterList(); + linkParams.add(new WidgetWorker.Parameter("portalPageId", portalPage.getString("portalPageId"), false)); + linkParams.add(new WidgetWorker.Parameter("parentPortalPageId", parentPortalPageId, false)); + if (link != null) { + localItem.link.setTarget(link.targetExdr.getOriginal()); + linkParams.addAll(link.parameterList); + } else { + localItem.link.setTarget("showPortalPage"); + } + localItem.link.setText((String)portalPage.get("portalPageName", locale)); + menuStringRenderer.renderMenuItem(writer, context, localItem); } - localItem.link.setText((String)portalPage.get("portalPageName", locale)); - menuStringRenderer.renderMenuItem(writer, context, localItem); } } } else { @@ -406,51 +409,6 @@ public class ModelMenuItem { return this.parentPortalPageId.expandString(context); } - public List<GenericValue> getPortalPages(Map<String, Object> context) { - List<GenericValue> portalPages = null; - String parentPortalPageId = this.getParentPortalPageId(context); - if (UtilValidate.isNotEmpty(parentPortalPageId)) { - Delegator delegator = WidgetWorker.getDelegator(context); - try { - // first get public pages - EntityCondition cond = - EntityCondition.makeCondition(UtilMisc.toList( - EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, "_NA_"), - EntityCondition.makeCondition(UtilMisc.toList( - EntityCondition.makeCondition("portalPageId", EntityOperator.EQUALS, parentPortalPageId), - EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)), - EntityOperator.OR)), - EntityOperator.AND); - portalPages = delegator.findList("PortalPage", cond, null, null, null, false); - if (UtilValidate.isNotEmpty(context.get("userLogin"))) { // check if a user is logged in - String userLoginId = ((GenericValue)context.get("userLogin")).getString("userLoginId"); - // replace with private pages - for (GenericValue portalPage : portalPages) { - cond = EntityCondition.makeCondition(UtilMisc.toList( - EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId), - EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, portalPage.getString("portalPageId"))), - EntityOperator.AND); - List <GenericValue> privatePortalPages = delegator.findList("PortalPage", cond, null, null, null, false); - if (UtilValidate.isNotEmpty(privatePortalPages)) { - portalPages.remove(portalPage); - portalPages.add(privatePortalPages.get(0)); - } - } - // add any other created private pages - cond = EntityCondition.makeCondition(UtilMisc.toList( - EntityCondition.makeCondition("ownerUserLoginId", EntityOperator.EQUALS, userLoginId), - EntityCondition.makeCondition("originalPortalPageId", EntityOperator.EQUALS, null), - EntityCondition.makeCondition("parentPortalPageId", EntityOperator.EQUALS, parentPortalPageId)), - EntityOperator.AND); - portalPages.addAll(delegator.findList("PortalPage", cond, null, null, null, false)); - } - portalPages = EntityUtil.orderBy(portalPages, UtilMisc.toList("sequenceNum")); - } catch (GenericEntityException e) { - Debug.logError("Could not retrieve portalpages in the menu:" + e.getMessage(), module); - } - } - return portalPages; - } public String getWidgetStyle() { if (UtilValidate.isNotEmpty(this.widgetStyle)) { return this.widgetStyle; |
Free forum by Nabble | Edit this page |