Skip to content

Commit c8f6ef8

Browse files
committed
LUT-30668 : SiteMap by template page cycle fix
1 parent af9d669 commit c8f6ef8

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/java/fr/paris/lutece/portal/web/menu/MenuItem.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.paris.lutece.portal.web.menu;
22

33
import java.util.ArrayList;
4+
import java.util.Collections;
45
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
@@ -260,15 +261,20 @@ public static List<MenuItem> buildTree( List<MenuItem> nodes )
260261
{
261262
Map<Integer, MenuItem> nodeMap = new HashMap<>( );
262263
List<MenuItem> roots = new ArrayList<>( );
263-
264+
int root = 0;
265+
264266
for ( MenuItem node : nodes )
265267
{
266268
nodeMap.put( node.getPageId( ), node );
267269
}
270+
if ( !nodeMap.isEmpty( ) && !nodeMap.containsKey( root ) )
271+
{
272+
root = Collections.min( nodeMap.entrySet( ), Map.Entry.comparingByKey( ) ).getKey( );
273+
}
268274

269275
for ( MenuItem node : nodes )
270276
{
271-
if ( 0 == node.getParentId( ) )
277+
if ( root == node.getParentId( ) )
272278
{
273279
roots.add( node );
274280
}

src/java/fr/paris/lutece/portal/web/xpages/SiteMapApp.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ public String buildPageContentTemplate( int nMode, HttpServletRequest request )
343343
int nLevel = 0;
344344

345345
List<MenuItem> mapItems = new ArrayList<MenuItem>( );
346-
buildMenu( request, mapItems, PortalService.getRootPageId( ), nLevel );
346+
buildMenu( request, mapItems, PortalService.getRootPageId( ), nLevel, new HashSet<>( ) );
347347

348348
Map<String, Object> model = new HashMap<>( );
349349
model.put( MARK_MAP_ITEMS, MenuTreeBuilder.buildTree( mapItems ) );
@@ -353,9 +353,14 @@ public String buildPageContentTemplate( int nMode, HttpServletRequest request )
353353

354354
return t.getHtml();
355355
}
356-
357-
private void buildMenu( HttpServletRequest request, List<MenuItem> flatMenu, int nPageId, int nLevel )
356+
357+
private void buildMenu( HttpServletRequest request, List<MenuItem> flatMenu, int nPageId, int nLevel, Set<Integer> seenPages )
358358
{
359+
if ( !seenPages.add( nPageId ) )
360+
{
361+
AppLogService.error( "SiteMapApp : A cycle exists in pages; page id {} was already processed", nPageId );
362+
return;
363+
}
359364
Page page = PageHome.getPage( nPageId );
360365

361366
if ( page.isVisible( request ) )
@@ -368,7 +373,7 @@ private void buildMenu( HttpServletRequest request, List<MenuItem> flatMenu, int
368373

369374
for ( Page pageChild : PageHome.getChildPagesMinimalData( nPageId ) )
370375
{
371-
buildMenu( request, flatMenu, pageChild.getId( ), nLevel + 1 );
376+
buildMenu( request, flatMenu, pageChild.getId( ), nLevel + 1, seenPages );
372377
}
373378
}
374379
}

0 commit comments

Comments
 (0)