diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Commands/BlogCommands.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Commands/BlogCommands.cs index e68cddf65..e908b5a22 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Commands/BlogCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Commands/BlogCommands.cs @@ -68,7 +68,7 @@ namespace Orchard.Blogs.Commands { [CommandName("blog create")] [CommandHelp("blog create [/Slug:] /Title: [/Owner:<username>] [/Description:<description>] [/MenuName:<name>] [/MenuText:<menu text>] [/Homepage:true|false]\r\n\t" + "Creates a new Blog")] - [OrchardSwitches("Title,Owner,Description,MenuText,Homepage,MenuName")] + [OrchardSwitches("Slug,Title,Owner,Description,MenuText,Homepage,MenuName")] public void Create() { if (String.IsNullOrEmpty(Owner)) { Owner = _siteService.GetSiteSettings().SuperUser; @@ -86,18 +86,6 @@ namespace Orchard.Blogs.Commands { if (!String.IsNullOrEmpty(Description)) { blog.As<BlogPart>().Description = Description; } - - if ( !String.IsNullOrWhiteSpace(MenuText) ) { - var menu = _menuService.GetMenu(MenuName); - - if (menu != null) { - var menuItem = _contentManager.Create<ContentMenuItemPart>("ContentMenuItem"); - menuItem.Content = blog; - menuItem.As<MenuPart>().MenuPosition = Position.GetNext(_navigationManager.BuildMenu(menu)); - menuItem.As<MenuPart>().MenuText = MenuText; - menuItem.As<MenuPart>().Menu = menu; - } - } if (Homepage || !String.IsNullOrWhiteSpace(Slug)) { dynamic dblog = blog; @@ -109,6 +97,18 @@ namespace Orchard.Blogs.Commands { _contentManager.Create(blog); + if (!String.IsNullOrWhiteSpace(MenuText)) { + var menu = _menuService.GetMenu(MenuName); + + if (menu != null) { + var menuItem = _contentManager.Create<ContentMenuItemPart>("ContentMenuItem"); + menuItem.Content = blog; + menuItem.As<MenuPart>().MenuPosition = _navigationManager.GetNextPosition(menu); + menuItem.As<MenuPart>().MenuText = MenuText; + menuItem.As<MenuPart>().Menu = menu; + } + } + Context.Output.WriteLine(T("Blog created successfully")); } diff --git a/src/Orchard/UI/Navigation/INavigationManager.cs b/src/Orchard/UI/Navigation/INavigationManager.cs index a6a51b1f1..86e3bf95d 100644 --- a/src/Orchard/UI/Navigation/INavigationManager.cs +++ b/src/Orchard/UI/Navigation/INavigationManager.cs @@ -8,5 +8,6 @@ namespace Orchard.UI.Navigation { IEnumerable<MenuItem> BuildMenu(IContent menu); IEnumerable<string> BuildImageSets(string menuName); string GetUrl(string menuItemUrl, RouteValueDictionary routeValueDictionary); + string GetNextPosition(IContent menu); } } \ No newline at end of file diff --git a/src/Orchard/UI/Navigation/NavigationManager.cs b/src/Orchard/UI/Navigation/NavigationManager.cs index efc129fbc..03df46a0a 100644 --- a/src/Orchard/UI/Navigation/NavigationManager.cs +++ b/src/Orchard/UI/Navigation/NavigationManager.cs @@ -8,6 +8,7 @@ using Orchard.Logging; using Orchard.Security; using Orchard.Security.Permissions; using Orchard.UI.Admin; +using Orchard.Utility; namespace Orchard.UI.Navigation { public class NavigationManager : INavigationManager { @@ -38,12 +39,17 @@ namespace Orchard.UI.Navigation { public IEnumerable<MenuItem> BuildMenu(string menuName) { var sources = GetSources(menuName); - return FinishMenu(Reduce(Merge(sources)).ToArray()); + return FinishMenu(Reduce(Merge(sources), menuName == "admin").ToArray()); } public IEnumerable<MenuItem> BuildMenu(IContent menu) { var sources = GetSources(menu); - return FinishMenu(Reduce(Arrange(Filter(Merge(sources)))).ToArray()); + return FinishMenu(Reduce(Arrange(Filter(Merge(sources))), false).ToArray()); + } + + public string GetNextPosition(IContent menu) { + var sources = GetSources(menu); + return Position.GetNext(Reduce(Arrange(Filter(Merge(sources))), false).ToArray()); } public IEnumerable<string> BuildImageSets(string menuName) { @@ -91,9 +97,8 @@ namespace Orchard.UI.Navigation { /// <summary> /// Updates the items by checking for permissions /// </summary> - private IEnumerable<MenuItem> Reduce(IEnumerable<MenuItem> items) { + private IEnumerable<MenuItem> Reduce(IEnumerable<MenuItem> items, bool isAdminMenu) { var hasDebugShowAllMenuItems = _authorizationService.TryCheckAccess(Permission.Named("DebugShowAllMenuItems"), _orchardServices.WorkContext.CurrentUser, null); - var isAdminMenu = AdminFilter.IsApplied(_urlHelper.RequestContext); foreach (var item in items) { if ( @@ -107,7 +112,7 @@ namespace Orchard.UI.Navigation { isAdminMenu && (!item.Permissions.Any() || item.Permissions.Any(x => _authorizationService.TryCheckAccess(x, _orchardServices.WorkContext.CurrentUser, null))) ) { yield return new MenuItem { - Items = Reduce(item.Items), + Items = Reduce(item.Items, isAdminMenu), Permissions = item.Permissions, Position = item.Position, RouteValues = item.RouteValues,