Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

David E. Jones-2

Very cool Scott! I guess it's about time that this part of the  
original design was supported by the implementation... ;)

-David


On Jun 15, 2009, at 10:37 PM, [hidden email] wrote:

> Author: lektran
> Date: Tue Jun 16 04:37:42 2009
> New Revision: 785077
>
> URL: http://svn.apache.org/viewvc?rev=785077&view=rev
> Log:
> Complete the partial support for nested menu items, e.g.
> <menu-item name="a" title="A">
>    <link target="aLink"></link>
>    <menu-item name="b" title="B">
>        <link target="bLink"/>
>    </menu-item>
> </menu-item>
> basically renders:
> <li>
>  <a href="aLink">A</a>
>  <ul>
>    <li>
>      <a href="bLink">B</a>
>    </li>
>  </ul>
> </li>
>
> Modified:
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenuItem.java
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=785077&r1=785076&r2=785077&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java Tue Jun 16 04:37:42 2009
> @@ -183,6 +183,24 @@
>         //if (Debug.infoOn()) Debug.logInfo("in  
> HtmlMenuRendererImage, link(0):" + link,"");
>         if (link != null) {
>             renderLink(writer, context, link);
> +        } else {
> +            String txt = menuItem.getTitle(context);
> +            StringUtil.SimpleEncoder simpleEncoder =  
> (StringUtil.SimpleEncoder) context.get("simpleEncoder");
> +            if (simpleEncoder != null) {
> +                txt = simpleEncoder.encode(txt);
> +            }
> +            writer.append(txt);
> +
> +        }
> +        if (!menuItem.getMenuItemList().isEmpty()) {
> +            appendWhitespace(writer);
> +            writer.append("    <ul>");
> +            appendWhitespace(writer);
> +            for (ModelMenuItem childMenuItem :  
> menuItem.getMenuItemList()) {
> +                childMenuItem.renderMenuItemString(writer, context,  
> this);
> +            }
> +            writer.append("    </ul>");
> +            appendWhitespace(writer);
>         }
>
>         writer.append("</li>");
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=785077&r1=785076&r2=785077&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java Tue Jun 16 04:37:42 2009
> @@ -345,60 +345,7 @@
>         // include portal pages if specified
>         //menuStringRenderer.renderFormatSimpleWrapperRows(writer,  
> context, this);
>         for (ModelMenuItem item : this.menuItemList) {
> -            String parentPortalPageId =  
> item.getParentPortalPageId(context);
> -            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> -                List <GenericValue> portalPages = null;
> -                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);
> -                }
> -                for (GenericValue portalPage : portalPages) {
> -                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> -                        ModelMenuItem localItem = new  
> ModelMenuItem(item.getModelMenu());
> -                        localItem.name =  
> portalPage.getString("portalPageId");
> -                        
> localItem.setTitle(portalPage.getString("portalPageName"));
> -                        localItem.link = new Link(item);
> -                        localItem.link.setTarget("showPortalPage?
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> -                        
> localItem.link.setText(portalPage.getString("portalPageName"));
> -                        localItem.renderMenuItemString(writer,  
> context, menuStringRenderer);
> -                    }
> -                }
> -            } else {
>                 item.renderMenuItemString(writer, context,  
> menuStringRenderer);
> -            }
>         }
>         // render formatting wrapper close
>         menuStringRenderer.renderFormatSimpleWrapperClose(writer,  
> context, this);
>
> 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=785077&r1=785076&r2=785077&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 Tue Jun 16 04:37:42 2009
> @@ -31,9 +31,16 @@
> import org.ofbiz.base.util.Debug;
> import org.ofbiz.base.util.StringUtil;
> import org.ofbiz.base.util.UtilFormatOut;
> +import org.ofbiz.base.util.UtilMisc;
> import org.ofbiz.base.util.UtilValidate;
> import org.ofbiz.base.util.UtilXml;
> import org.ofbiz.base.util.string.FlexibleStringExpander;
> +import org.ofbiz.entity.GenericDelegator;
> +import org.ofbiz.entity.GenericEntityException;
> +import org.ofbiz.entity.GenericValue;
> +import org.ofbiz.entity.condition.EntityCondition;
> +import org.ofbiz.entity.condition.EntityOperator;
> +import org.ofbiz.entity.util.EntityUtil;
> import org.ofbiz.entityext.permission.EntityPermissionChecker;
> import org.ofbiz.widget.WidgetWorker;
> import org.w3c.dom.Element;
> @@ -200,6 +207,9 @@
>         }
>     }
>
> +    public List<ModelMenuItem> getMenuItemList() {
> +        return menuItemList;
> +    }
>
>     public void setHideIfSelected(String val) {
>         if (UtilValidate.isNotEmpty(val))
> @@ -248,7 +258,7 @@
>
>     public void renderMenuItemString(Appendable writer, Map<String,  
> Object> context, MenuStringRenderer menuStringRenderer) throws  
> IOException {
>
> -          boolean passed = true;
> +        boolean passed = true;
>         if (this.condition != null) {
>             if (!this.condition.eval(context)) {
>                 passed = false;
> @@ -257,7 +267,23 @@
>            //Debug.logInfo("in ModelMenu, name:" + this.getName(),  
> module);
>         if (passed) {
>             ModelMenuAction.runSubActions(this.actions, context);
> -            menuStringRenderer.renderMenuItem(writer, context, this);
> +            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(portalPage.getString("portalPageName"));
> +                        localItem.link = new Link(this);
> +                        localItem.link.setTarget("showPortalPage?
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> +                        
> localItem.link.setText(portalPage.getString("portalPageName"));
> +                        menuStringRenderer.renderMenuItem(writer,  
> context, localItem);
> +                    }
> +                }
> +            } else {
> +                menuStringRenderer.renderMenuItem(writer, context,  
> this);
> +            }
>         }
>     }
>
> @@ -354,6 +380,51 @@
>         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)) {
> +            GenericDelegator delegator = modelMenu.getDelegator();
> +            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;
>
>

Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java

Scott Gray-2
Thanks David, its still not entirely there though, we'll need to get some javascript code in there at some point to make the nested menus usable.  Also there was no support in the xsd for applying attributes (class, id, etc) to the nested ul element.

Regards
Scott

HotWax Media
http://www.hotwaxmedia.com
801.657.2909

----- Original Message -----
From: "David E Jones" <[hidden email]>
To: [hidden email]
Cc: [hidden email]
Sent: Tuesday, June 16, 2009 6:04:12 PM (GMT+1000) Auto-Detected
Subject: Re: svn commit: r785077 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlMenuRenderer.java menu/ModelMenu.java menu/ModelMenuItem.java


Very cool Scott! I guess it's about time that this part of the  
original design was supported by the implementation... ;)

-David


On Jun 15, 2009, at 10:37 PM, [hidden email] wrote:

> Author: lektran
> Date: Tue Jun 16 04:37:42 2009
> New Revision: 785077
>
> URL: http://svn.apache.org/viewvc?rev=785077&view=rev
> Log:
> Complete the partial support for nested menu items, e.g.
> <menu-item name="a" title="A">
>    <link target="aLink"></link>
>    <menu-item name="b" title="B">
>        <link target="bLink"/>
>    </menu-item>
> </menu-item>
> basically renders:
> <li>
>  <a href="aLink">A</a>
>  <ul>
>    <li>
>      <a href="bLink">B</a>
>    </li>
>  </ul>
> </li>
>
> Modified:
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenuItem.java
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlMenuRenderer.java?rev=785077&r1=785076&r2=785077&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/
> HtmlMenuRenderer.java Tue Jun 16 04:37:42 2009
> @@ -183,6 +183,24 @@
>         //if (Debug.infoOn()) Debug.logInfo("in  
> HtmlMenuRendererImage, link(0):" + link,"");
>         if (link != null) {
>             renderLink(writer, context, link);
> +        } else {
> +            String txt = menuItem.getTitle(context);
> +            StringUtil.SimpleEncoder simpleEncoder =  
> (StringUtil.SimpleEncoder) context.get("simpleEncoder");
> +            if (simpleEncoder != null) {
> +                txt = simpleEncoder.encode(txt);
> +            }
> +            writer.append(txt);
> +
> +        }
> +        if (!menuItem.getMenuItemList().isEmpty()) {
> +            appendWhitespace(writer);
> +            writer.append("    <ul>");
> +            appendWhitespace(writer);
> +            for (ModelMenuItem childMenuItem :  
> menuItem.getMenuItemList()) {
> +                childMenuItem.renderMenuItemString(writer, context,  
> this);
> +            }
> +            writer.append("    </ul>");
> +            appendWhitespace(writer);
>         }
>
>         writer.append("</li>");
>
> Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/ModelMenu.java?rev=785077&r1=785076&r2=785077&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java (original)
> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/menu/
> ModelMenu.java Tue Jun 16 04:37:42 2009
> @@ -345,60 +345,7 @@
>         // include portal pages if specified
>         //menuStringRenderer.renderFormatSimpleWrapperRows(writer,  
> context, this);
>         for (ModelMenuItem item : this.menuItemList) {
> -            String parentPortalPageId =  
> item.getParentPortalPageId(context);
> -            if (UtilValidate.isNotEmpty(parentPortalPageId)) {
> -                List <GenericValue> portalPages = null;
> -                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);
> -                }
> -                for (GenericValue portalPage : portalPages) {
> -                    if  
> (UtilValidate.isNotEmpty(portalPage.getString("portalPageName"))) {
> -                        ModelMenuItem localItem = new  
> ModelMenuItem(item.getModelMenu());
> -                        localItem.name =  
> portalPage.getString("portalPageId");
> -                        
> localItem.setTitle(portalPage.getString("portalPageName"));
> -                        localItem.link = new Link(item);
> -                        localItem.link.setTarget("showPortalPage?
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> -                        
> localItem.link.setText(portalPage.getString("portalPageName"));
> -                        localItem.renderMenuItemString(writer,  
> context, menuStringRenderer);
> -                    }
> -                }
> -            } else {
>                 item.renderMenuItemString(writer, context,  
> menuStringRenderer);
> -            }
>         }
>         // render formatting wrapper close
>         menuStringRenderer.renderFormatSimpleWrapperClose(writer,  
> context, this);
>
> 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=785077&r1=785076&r2=785077&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 Tue Jun 16 04:37:42 2009
> @@ -31,9 +31,16 @@
> import org.ofbiz.base.util.Debug;
> import org.ofbiz.base.util.StringUtil;
> import org.ofbiz.base.util.UtilFormatOut;
> +import org.ofbiz.base.util.UtilMisc;
> import org.ofbiz.base.util.UtilValidate;
> import org.ofbiz.base.util.UtilXml;
> import org.ofbiz.base.util.string.FlexibleStringExpander;
> +import org.ofbiz.entity.GenericDelegator;
> +import org.ofbiz.entity.GenericEntityException;
> +import org.ofbiz.entity.GenericValue;
> +import org.ofbiz.entity.condition.EntityCondition;
> +import org.ofbiz.entity.condition.EntityOperator;
> +import org.ofbiz.entity.util.EntityUtil;
> import org.ofbiz.entityext.permission.EntityPermissionChecker;
> import org.ofbiz.widget.WidgetWorker;
> import org.w3c.dom.Element;
> @@ -200,6 +207,9 @@
>         }
>     }
>
> +    public List<ModelMenuItem> getMenuItemList() {
> +        return menuItemList;
> +    }
>
>     public void setHideIfSelected(String val) {
>         if (UtilValidate.isNotEmpty(val))
> @@ -248,7 +258,7 @@
>
>     public void renderMenuItemString(Appendable writer, Map<String,  
> Object> context, MenuStringRenderer menuStringRenderer) throws  
> IOException {
>
> -          boolean passed = true;
> +        boolean passed = true;
>         if (this.condition != null) {
>             if (!this.condition.eval(context)) {
>                 passed = false;
> @@ -257,7 +267,23 @@
>            //Debug.logInfo("in ModelMenu, name:" + this.getName(),  
> module);
>         if (passed) {
>             ModelMenuAction.runSubActions(this.actions, context);
> -            menuStringRenderer.renderMenuItem(writer, context, this);
> +            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(portalPage.getString("portalPageName"));
> +                        localItem.link = new Link(this);
> +                        localItem.link.setTarget("showPortalPage?
> portalPageId=" + portalPage.getString("portalPageId") +  
> "&parentPortalPageId=" + parentPortalPageId);
> +                        
> localItem.link.setText(portalPage.getString("portalPageName"));
> +                        menuStringRenderer.renderMenuItem(writer,  
> context, localItem);
> +                    }
> +                }
> +            } else {
> +                menuStringRenderer.renderMenuItem(writer, context,  
> this);
> +            }
>         }
>     }
>
> @@ -354,6 +380,51 @@
>         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)) {
> +            GenericDelegator delegator = modelMenu.getDelegator();
> +            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;
>
>