From 015b26928f2c52186560c6a700b35e3c36131474 Mon Sep 17 00:00:00 2001 From: Suha Can Date: Wed, 10 Feb 2010 13:23:11 -0800 Subject: [PATCH] More Navigation backend work. - MenuPart/record - Permissions and AdminMenu for the core nav package as well as some placeholders for the upcoming work. --HG-- branch : dev --- src/Orchard.Web/Core/Navigation/AdminMenu.cs | 13 +++++++ .../Navigation/Controllers/AdminController.cs | 21 ++++++++++++ .../Core/Navigation/Models/MenuPart.cs | 21 ++++++++++++ .../Core/Navigation/Permissions.cs | 27 +++++++++++++++ .../Core/Navigation/Records/MenuPartRecord.cs | 8 +++++ .../Core/Navigation/Services/MainMenu.cs | 12 +++++++ .../ViewModels/NavigationIndexViewModel.cs | 6 ++++ .../Core/Navigation/Views/Admin/Index.ascx | 3 ++ .../Core/Navigation/Views/Web.config | 34 +++++++++++++++++++ src/Orchard.Web/Core/Orchard.Core.csproj | 13 +++++-- 10 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 src/Orchard.Web/Core/Navigation/AdminMenu.cs create mode 100644 src/Orchard.Web/Core/Navigation/Controllers/AdminController.cs create mode 100644 src/Orchard.Web/Core/Navigation/Models/MenuPart.cs create mode 100644 src/Orchard.Web/Core/Navigation/Permissions.cs create mode 100644 src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs create mode 100644 src/Orchard.Web/Core/Navigation/Services/MainMenu.cs create mode 100644 src/Orchard.Web/Core/Navigation/ViewModels/NavigationIndexViewModel.cs create mode 100644 src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx create mode 100644 src/Orchard.Web/Core/Navigation/Views/Web.config diff --git a/src/Orchard.Web/Core/Navigation/AdminMenu.cs b/src/Orchard.Web/Core/Navigation/AdminMenu.cs new file mode 100644 index 000000000..d1e4f4147 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/AdminMenu.cs @@ -0,0 +1,13 @@ +using Orchard.UI.Navigation; + +namespace Orchard.Core.Navigation { + public class AdminMenu : INavigationProvider { + public string MenuName { get { return "admin"; } } + + public void GetNavigation(NavigationBuilder builder) { + builder.Add("Navigation", "12", + menu => menu + .Add("Manage Main Menu", "2.0", item => item.Action("Index", "Admin", new { area = "Navigation" }).Permission(Permissions.ManageMainMenu))); + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Controllers/AdminController.cs b/src/Orchard.Web/Core/Navigation/Controllers/AdminController.cs new file mode 100644 index 000000000..f234ae867 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Controllers/AdminController.cs @@ -0,0 +1,21 @@ +using System.Web.Mvc; +using Orchard.Core.Navigation.ViewModels; +using Orchard.Localization; + +namespace Orchard.Core.Navigation.Controllers { + [ValidateInput(false)] + public class AdminController : Controller { + public IOrchardServices Services { get; private set; } + + public AdminController(IOrchardServices services) { + Services = services; + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + public ActionResult Index() { + return View(new NavigationIndexViewModel()); + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs new file mode 100644 index 000000000..b042a92ee --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Models/MenuPart.cs @@ -0,0 +1,21 @@ +using System.Web.Mvc; +using Orchard.ContentManagement; +using Orchard.Core.Navigation.Records; + +namespace Orchard.Core.Navigation.Models { + public class MenuPart : ContentPart { + [HiddenInput(DisplayValue = false)] + public int Id { get { return ContentItem.Id; } } + + public string MenuText { + get { return Record.MenuText; } + set { Record.MenuText = value; } + } + + [HiddenInput(DisplayValue = false)] + public string MenuPosition { + get { return Record.MenuPosition; } + set { Record.MenuPosition = value; } + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Navigation/Permissions.cs b/src/Orchard.Web/Core/Navigation/Permissions.cs new file mode 100644 index 000000000..ddcf75949 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Permissions.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using Orchard.Security.Permissions; + +namespace Orchard.Core.Navigation { + public class Permissions : IPermissionProvider { + public static readonly Permission ManageMainMenu = new Permission { Name = "ManageMainMenu", Description = "Manage main menu" }; + + public string ModuleName { + get { return "Navigation"; } + } + + public IEnumerable GetPermissions() { + return new[] { + ManageMainMenu + }; + } + + public IEnumerable GetDefaultStereotypes() { + return new[] { + new PermissionStereotype { + Name = "Administrators", + Permissions = new[] {ManageMainMenu} + } + }; + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs b/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs new file mode 100644 index 000000000..3536dbcb8 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs @@ -0,0 +1,8 @@ +using Orchard.ContentManagement.Records; + +namespace Orchard.Core.Navigation.Records { + public class MenuPartRecord : ContentPartRecord { + public virtual string MenuText { get; set; } + public virtual string MenuPosition { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs new file mode 100644 index 000000000..379778f7d --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs @@ -0,0 +1,12 @@ +using System; +using Orchard.UI.Navigation; + +namespace Orchard.Core.Navigation.Services { + public class MainMenu : INavigationProvider { + public string MenuName { get { return "MainMenu"; } } + + public void GetNavigation(NavigationBuilder builder) { + throw new NotImplementedException(); + } + } +} diff --git a/src/Orchard.Web/Core/Navigation/ViewModels/NavigationIndexViewModel.cs b/src/Orchard.Web/Core/Navigation/ViewModels/NavigationIndexViewModel.cs new file mode 100644 index 000000000..4bd3d5fa5 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/ViewModels/NavigationIndexViewModel.cs @@ -0,0 +1,6 @@ +using Orchard.Mvc.ViewModels; + +namespace Orchard.Core.Navigation.ViewModels { + public class NavigationIndexViewModel : AdminViewModel { + } +} diff --git a/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx b/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx new file mode 100644 index 000000000..f4d02efe0 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Views/Admin/Index.ascx @@ -0,0 +1,3 @@ +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Navigation.ViewModels"%> +

<%=Html.TitleForPage(T("Edit Main Menu").ToString())%>

diff --git a/src/Orchard.Web/Core/Navigation/Views/Web.config b/src/Orchard.Web/Core/Navigation/Views/Web.config new file mode 100644 index 000000000..7022197d4 --- /dev/null +++ b/src/Orchard.Web/Core/Navigation/Views/Web.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index d91458e43..43879c789 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -102,6 +102,13 @@ + + + + + + + @@ -202,8 +209,10 @@ - - + + + +