Starting to deprecate the AdminViewModel

All references are changed to BaseViewModel
AdminViewModel class still present, but only temporarily as a stepping stone to smooth transition
BaseViewModel.Menu now represents either the "admin" or "main" navigation depending on location
MenuFilter now uses the AdminFilter.IsApplied flag to determine which primary nav to use
IsApplied property moved to AdminFilter which is a better location for a universal flag than the theme selector

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-02-26 13:58:09 -08:00
parent 2145f4e544
commit 93c18ac293
53 changed files with 202 additions and 131 deletions

View File

@@ -158,6 +158,7 @@
<Compile Include="Tasks\SweepGeneratorTests.cs" />
<Compile Include="UI\Admin\AdminAuthorizationFilterTests.cs" />
<Compile Include="UI\Admin\AdminThemeSelectorTests.cs" />
<Compile Include="UI\Navigation\MenuFilterTests.cs" />
<Compile Include="UI\Notify\NotifierTests.cs" />
<Compile Include="UI\Notify\NotifyFilterTests.cs" />
<Compile Include="Services\ClockTests.cs" />

View File

@@ -31,7 +31,7 @@ namespace Orchard.Tests.UI.Admin {
public void NormalRequestShouldNotBeAffected() {
var authorizationContext = GetAuthorizationContext<NormalController>();
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
var filter = new AdminFilter(GetAuthorizer(false));
filter.OnAuthorization(authorizationContext);
Assert.That(authorizationContext.Result, Is.Null);
@@ -39,16 +39,16 @@ namespace Orchard.Tests.UI.Admin {
private static void TestActionThatShouldRequirePermission<TController>() where TController : ControllerBase, new() {
var authorizationContext = GetAuthorizationContext<TController>();
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
var filter = new AdminFilter(GetAuthorizer(false));
filter.OnAuthorization(authorizationContext);
Assert.That(authorizationContext.Result, Is.InstanceOf<HttpUnauthorizedResult>());
Assert.That(AdminThemeSelector.IsApplied(authorizationContext.RequestContext), Is.True);
Assert.That(AdminFilter.IsApplied(authorizationContext.RequestContext), Is.True);
var authorizationContext2 = GetAuthorizationContext<TController>();
var filter2 = new AdminAuthorizationFilter(GetAuthorizer(true));
var filter2 = new AdminFilter(GetAuthorizer(true));
filter2.OnAuthorization(authorizationContext2);
Assert.That(authorizationContext2.Result, Is.Null);
Assert.That(AdminThemeSelector.IsApplied(authorizationContext2.RequestContext), Is.True);
Assert.That(AdminFilter.IsApplied(authorizationContext2.RequestContext), Is.True);
}

View File

@@ -9,27 +9,27 @@ namespace Orchard.Tests.UI.Admin {
[Test]
public void IsAppliedShouldBeFalseByDefault() {
var context = new RequestContext(new StubHttpContext(), new RouteData());
var isApplied = AdminThemeSelector.IsApplied(context);
var isApplied = AdminFilter.IsApplied(context);
Assert.That(isApplied, Is.False);
}
[Test]
public void IsAppliedShouldBeTrueAfterBeingApplied() {
var context = new RequestContext(new StubHttpContext(), new RouteData());
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
AdminThemeSelector.Apply(context);
Assert.That(AdminThemeSelector.IsApplied(context), Is.True);
Assert.That(AdminFilter.IsApplied(context), Is.False);
AdminFilter.Apply(context);
Assert.That(AdminFilter.IsApplied(context), Is.True);
}
[Test]
public void IsAppliedIsFalseOnNewContext() {
var context = new RequestContext(new StubHttpContext(), new RouteData());
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
AdminThemeSelector.Apply(context);
Assert.That(AdminThemeSelector.IsApplied(context), Is.True);
Assert.That(AdminFilter.IsApplied(context), Is.False);
AdminFilter.Apply(context);
Assert.That(AdminFilter.IsApplied(context), Is.True);
context = new RequestContext(new StubHttpContext(), new RouteData());
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
Assert.That(AdminFilter.IsApplied(context), Is.False);
}
[Test]
@@ -45,8 +45,8 @@ namespace Orchard.Tests.UI.Admin {
[Test]
public void ThemeResultShouldBeTheAdminAt100AfterBeingSet() {
var context = new RequestContext(new StubHttpContext(), new RouteData());
AdminThemeSelector.Apply(context);
AdminFilter.Apply(context);
var selector = new AdminThemeSelector();
var result = selector.GetTheme(context);

View File

@@ -0,0 +1,100 @@
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using Moq;
using NUnit.Framework;
using Orchard.Localization;
using Orchard.Mvc.ViewModels;
using Orchard.Security;
using Orchard.Tests.Stubs;
using Orchard.UI.Admin;
using Orchard.UI.Navigation;
namespace Orchard.Tests.UI.Navigation {
[TestFixture]
public class MenuFilterTests {
private static AuthorizationContext GetAuthorizationContext<TController>() where TController : ControllerBase, new() {
var controllerDescriptor = new ReflectedControllerDescriptor(typeof(TController));
var controllerContext = new ControllerContext(new StubHttpContext(), new RouteData(), new TController());
return new AuthorizationContext(
controllerContext,
controllerDescriptor.FindAction(controllerContext, "Index"));
}
private static IAuthorizer GetAuthorizer(bool result) {
var authorizer = new Mock<IAuthorizer>();
authorizer
.Setup(x => x.Authorize(StandardPermissions.AccessAdminPanel, It.IsAny<LocalizedString>())).
Returns(result);
return authorizer.Object;
}
private static Mock<INavigationManager> GetNavigationManager() {
var mainMenu = new[] { new MenuItem { Text = "The Main Menu" } };
var adminMenu = new[] { new MenuItem { Text = "The Admin Menu" } };
var navigationManager = new Mock<INavigationManager>();
navigationManager.Setup(x => x.BuildMenu("main")).Returns(mainMenu);
navigationManager.Setup(x => x.BuildMenu("admin")).Returns(adminMenu);
return navigationManager;
}
[Test]
public void MockNavManagerWorks() {
var main = GetNavigationManager().Object.BuildMenu("main");
Assert.That(main.Count(), Is.EqualTo(1));
}
[Test]
public void MainMenuShouldBeCalledNormally() {
Mock<INavigationManager> navigationManager = GetNavigationManager();
var authorizationContext = GetAuthorizationContext<NormalController>();
var adminFilter = new AdminFilter(GetAuthorizer(true));
adminFilter.OnAuthorization(authorizationContext);
var viewModel = new BaseViewModel();
var resultExecutingContext = new ResultExecutingContext(
authorizationContext,
new ViewResult { ViewData = new ViewDataDictionary<BaseViewModel>(viewModel) });
var menuFilter = new MenuFilter(navigationManager.Object);
menuFilter.OnResultExecuting(resultExecutingContext);
Assert.That(viewModel.Menu, Is.Not.Null);
Assert.That(viewModel.Menu.Single().Text, Is.SameAs("The Main Menu"));
}
[Test]
public void AdminMenuShouldHaveDifferentNavigation() {
Mock<INavigationManager> navigationManager = GetNavigationManager();
var authorizationContext = GetAuthorizationContext<AdminController>();
var adminFilter = new AdminFilter(GetAuthorizer(true));
adminFilter.OnAuthorization(authorizationContext);
var viewModel = new BaseViewModel();
var resultExecutingContext = new ResultExecutingContext(
authorizationContext,
new ViewResult { ViewData = new ViewDataDictionary<BaseViewModel>(viewModel) });
var menuFilter = new MenuFilter(navigationManager.Object);
menuFilter.OnResultExecuting(resultExecutingContext);
Assert.That(viewModel.Menu, Is.Not.Null);
Assert.That(viewModel.Menu.Single().Text, Is.SameAs("The Admin Menu"));
}
}
public class NormalController : Controller {
public ActionResult Index() {
return View();
}
}
public class AdminController : Controller {
public ActionResult Index() {
return View();
}
}
}

View File

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Routing;
using System.Web.Routing;
using NUnit.Framework;
using Orchard.UI.Navigation;

View File

@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Orchard.UI.Navigation;

View File

@@ -62,12 +62,12 @@ namespace Orchard.Tests.UI.Notify {
var filter = new NotifyFilter(sink);
sink.Information("Working");
var model = new AdminViewModel();
var model = new BaseViewModel();
var context = BuildContext();
context.Controller.TempData.Add("messages", "dont-destroy" + System.Environment.NewLine + "-" + System.Environment.NewLine);
context.Result = new ViewResult {
ViewData = new ViewDataDictionary<AdminViewModel>(model),
ViewData = new ViewDataDictionary<BaseViewModel>(model),
TempData = context.Controller.TempData
};

View File

@@ -2,7 +2,7 @@ using Orchard.Core.Navigation.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Core.Navigation.ViewModels {
public class CreateMenuItemViewModel : AdminViewModel {
public class CreateMenuItemViewModel : BaseViewModel {
public ContentItemViewModel<MenuPart> MenuItem { get; set; }
}
}

View File

@@ -3,7 +3,7 @@ using System.Linq;
using Orchard.Mvc.ViewModels;
namespace Orchard.Core.Navigation.ViewModels {
public class NavigationManagementViewModel : AdminViewModel {
public class NavigationManagementViewModel : BaseViewModel {
public NavigationManagementViewModel() {
MenuItemEntries = Enumerable.Empty<MenuItemEntry>().ToList();
}

View File

@@ -116,7 +116,6 @@
<Compile Include="Navigation\Records\MenuItemRecord.cs" />
<Compile Include="Navigation\Records\MenuPartRecord.cs" />
<Compile Include="Navigation\Services\MainMenu.cs" />
<Compile Include="Navigation\Filters\MainMenuFilter.cs" />
<Compile Include="Navigation\ViewModels\CreateMenuItemViewModel.cs" />
<Compile Include="Navigation\ViewModels\MenuItemEntry.cs" />
<Compile Include="Navigation\ViewModels\NavigationManagementViewModel.cs" />

View File

@@ -4,7 +4,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Core.Settings.Models;
namespace Orchard.Core.Settings.ViewModels {
public class SettingsIndexViewModel : AdminViewModel {
public class SettingsIndexViewModel : BaseViewModel {
public SiteSettings Site { get; set; }
public ContentItemViewModel ViewModel { get; set; }

View File

@@ -97,7 +97,7 @@ namespace Orchard.Core.Themes.Controllers {
}
public ActionResult Install() {
return View(new AdminViewModel());
return View(new BaseViewModel());
}
[HttpPost]

View File

@@ -3,7 +3,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Themes;
namespace Orchard.Core.Themes.ViewModels {
public class ThemesIndexViewModel : AdminViewModel {
public class ThemesIndexViewModel : BaseViewModel {
public ITheme CurrentTheme { get; set; }
public IEnumerable<ITheme> Themes { get; set; }
}

View File

@@ -3,7 +3,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class AdminBlogsViewModel : AdminViewModel {
public class AdminBlogsViewModel : BaseViewModel {
public IEnumerable<AdminBlogEntry> Entries { get; set; }
}

View File

@@ -2,7 +2,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class BlogEditViewModel : AdminViewModel {
public class BlogEditViewModel : BaseViewModel {
public ContentItemViewModel<Blog> Blog { get; set; }
public bool PromoteToHomePage { get; set; }
}

View File

@@ -2,7 +2,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class BlogForAdminViewModel : AdminViewModel {
public class BlogForAdminViewModel : BaseViewModel {
public ContentItemViewModel<Blog> Blog { get; set; }
}
}

View File

@@ -2,7 +2,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class BlogPostEditViewModel : AdminViewModel {
public class BlogPostEditViewModel : BaseViewModel {
public ContentItemViewModel<BlogPost> BlogPost { get; set; }
}
}

View File

@@ -2,7 +2,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class CreateBlogPostViewModel : AdminViewModel {
public class CreateBlogPostViewModel : BaseViewModel {
public ContentItemViewModel<BlogPost> BlogPost { get; set; }
}
}

View File

@@ -2,7 +2,7 @@ using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class CreateBlogViewModel : AdminViewModel {
public class CreateBlogViewModel : BaseViewModel {
public ContentItemViewModel<Blog> Blog { get; set; }
}
}

View File

@@ -2,7 +2,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Comments.ViewModels {
public class CommentsCreateViewModel : AdminViewModel {
public class CommentsCreateViewModel : BaseViewModel {
[Required]
public string Name { get; set; }
public string Email { get; set; }

View File

@@ -2,7 +2,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Comments.ViewModels {
public class CommentsDetailsViewModel : AdminViewModel {
public class CommentsDetailsViewModel : BaseViewModel {
public IList<CommentEntry> Comments { get; set; }
public CommentDetailsOptions Options { get; set; }
public string DisplayNameForCommentedItem { get; set; }

View File

@@ -2,7 +2,7 @@
using Orchard.Comments.Models;
namespace Orchard.Comments.ViewModels {
public class CommentsEditViewModel : AdminViewModel {
public class CommentsEditViewModel : BaseViewModel {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }

View File

@@ -3,7 +3,7 @@ using Orchard.Comments.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Comments.ViewModels {
public class CommentsIndexViewModel : AdminViewModel {
public class CommentsIndexViewModel : BaseViewModel {
public IList<CommentEntry> Comments { get; set; }
public CommentIndexOptions Options { get; set; }
}

View File

@@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations;
using Orchard.Mvc.ViewModels;
namespace Orchard.Media.ViewModels {
public class MediaFolderCreateViewModel : AdminViewModel {
public class MediaFolderCreateViewModel : BaseViewModel {
[Required, DisplayName("Folder Name:")]
public string Name { get; set; }
public string MediaPath { get; set; }

View File

@@ -1,7 +1,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Media.ViewModels {
public class MediaFolderEditPropertiesViewModel : AdminViewModel {
public class MediaFolderEditPropertiesViewModel : BaseViewModel {
public string Name { get; set; }
public string MediaPath { get; set; }
}

View File

@@ -3,7 +3,7 @@ using Orchard.Media.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Media.ViewModels {
public class MediaFolderEditViewModel : AdminViewModel {
public class MediaFolderEditViewModel : BaseViewModel {
public string FolderName { get; set; }
public string MediaPath { get; set; }
public IEnumerable<MediaFolder> MediaFolders { get; set; }

View File

@@ -3,7 +3,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Media.Models;
namespace Orchard.Media.ViewModels {
public class MediaFolderIndexViewModel : AdminViewModel {
public class MediaFolderIndexViewModel : BaseViewModel {
public IEnumerable<MediaFolder> MediaFolders { get; set; }
}
}

View File

@@ -1,7 +1,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Media.ViewModels {
public class MediaItemAddViewModel : AdminViewModel {
public class MediaItemAddViewModel : BaseViewModel {
public string FolderName { get; set; }
public string MediaPath { get; set; }
}

View File

@@ -2,7 +2,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Media.ViewModels {
public class MediaItemEditViewModel : AdminViewModel {
public class MediaItemEditViewModel : BaseViewModel {
public string Name { get; set; }
public string Caption { get; set; }
public long Size { get; set; }

View File

@@ -2,7 +2,7 @@
using Orchard.Pages.Models;
namespace Orchard.Pages.ViewModels {
public class PageCreateViewModel : AdminViewModel {
public class PageCreateViewModel : BaseViewModel {
public ContentItemViewModel<Page> Page { get; set; }
}
}

View File

@@ -2,7 +2,7 @@
using Orchard.Mvc.ViewModels;
namespace Orchard.Pages.ViewModels {
public class PageEditViewModel : AdminViewModel {
public class PageEditViewModel : BaseViewModel {
public ContentItemViewModel<Page> Page { get; set; }
public bool PromoteToHomePage { get; set; }
}

View File

@@ -3,7 +3,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Pages.Models;
namespace Orchard.Pages.ViewModels {
public class PagesViewModel : AdminViewModel {
public class PagesViewModel : BaseViewModel {
public IList<PageEntry> PageEntries { get; set; }
public PagesOptions Options { get; set; }
}

View File

@@ -4,7 +4,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Security.Permissions;
namespace Orchard.Roles.ViewModels {
public class RoleCreateViewModel : AdminViewModel {
public class RoleCreateViewModel : BaseViewModel {
[Required]
public string Name { get; set; }
public IDictionary<string, IEnumerable<Permission>> ModulePermissions { get; set; }

View File

@@ -5,7 +5,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Security.Permissions;
namespace Orchard.Roles.ViewModels {
public class RoleEditViewModel : AdminViewModel {
public class RoleEditViewModel : BaseViewModel {
public int Id { get; set; }
[Required]
public string Name { get; set; }

View File

@@ -3,7 +3,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Roles.Records;
namespace Orchard.Roles.ViewModels {
public class RolesIndexViewModel : AdminViewModel {
public class RolesIndexViewModel : BaseViewModel {
public IList<RoleRecord> Rows { get; set; }
}
}

View File

@@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations;
using Orchard.Mvc.ViewModels;
namespace Orchard.Tags.ViewModels {
public class TagsAdminCreateViewModel : AdminViewModel {
public class TagsAdminCreateViewModel : BaseViewModel {
[Required, DisplayName("Name:")]
public string TagName { get; set; }
}

View File

@@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations;
using Orchard.Mvc.ViewModels;
namespace Orchard.Tags.ViewModels {
public class TagsAdminEditViewModel : AdminViewModel {
public class TagsAdminEditViewModel : BaseViewModel {
public int Id { get; set; }
[Required, DisplayName("Name:")]
public string TagName { get; set; }

View File

@@ -3,7 +3,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Tags.Models;
namespace Orchard.Tags.ViewModels {
public class TagsAdminIndexViewModel : AdminViewModel {
public class TagsAdminIndexViewModel : BaseViewModel {
public IList<TagEntry> Tags { get; set; }
public TagAdminIndexBulkAction BulkAction { get; set; }
}

View File

@@ -3,7 +3,7 @@ using Orchard.ContentManagement;
using Orchard.Mvc.ViewModels;
namespace Orchard.Tags.ViewModels {
public class TagsAdminSearchViewModel : AdminViewModel {
public class TagsAdminSearchViewModel : BaseViewModel {
public string TagName { get; set; }
public IEnumerable<IContent> Contents { get; set; }
}

View File

@@ -6,7 +6,7 @@ using Orchard.Security;
using Orchard.Users.Models;
namespace Orchard.Users.ViewModels {
public class UserCreateViewModel : AdminViewModel {
public class UserCreateViewModel : BaseViewModel {
[Required]
public string UserName { get; set; }

View File

@@ -5,7 +5,7 @@ using Orchard.Mvc.ViewModels;
using Orchard.Users.Models;
namespace Orchard.Users.ViewModels {
public class UserEditViewModel : AdminViewModel {
public class UserEditViewModel : BaseViewModel {
[HiddenInput(DisplayValue = false)]
public int Id {
get { return User.Item.Id; }

View File

@@ -4,7 +4,7 @@ using Orchard.Users.Models;
namespace Orchard.Users.ViewModels {
public class UsersIndexViewModel : AdminViewModel {
public class UsersIndexViewModel : BaseViewModel {
public class Row {
public User User { get; set; }
}

View File

@@ -1,4 +1,4 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<AdminViewModel>" %>
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BaseViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<div id="app"><%=Html.ActionLink(T("Project Orchard").ToString(), "Index", new { Area = "", Controller = "Home" })%></div>
<div id="site"><%=Html.ActionLink(T("Your Site").ToString(), "Index", new { Area = "", Controller = "Home" })%></div>

View File

@@ -1,4 +1,4 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<AdminViewModel>" %>
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BaseViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<%@ Import Namespace="Orchard.Mvc.Html"%><%
Html.RegisterStyle("site.css");

View File

@@ -1,9 +1,9 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<AdminViewModel>" %>
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BaseViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<ul id="navigation" role="navigation">
<li class="first"><h3><span><%=_Encoded("Dashboard")%></span></h3></li>
<%if (Model.AdminMenu != null) {
foreach (var menuSection in Model.AdminMenu) {
<%if (Model.Menu != null) {
foreach (var menuSection in Model.Menu) {
// todo: (heskew) need some help(er)
var firstSectionItem = menuSection.Items.FirstOrDefault();
var sectionHeaderMarkup = firstSectionItem != null

View File

@@ -1,4 +1,4 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<AdminViewModel>" %>
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<BaseViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<% if (Model.CurrentUser != null) {
%><div id="login"><%=_Encoded("User:")%> <%=Html.Encode(Model.CurrentUser.UserName)%> | <%=Html.ActionLink(T("Logout").ToString(), "LogOff", new { Area = "Orchard.Users", Controller = "Account" }) %></div><%

View File

@@ -1,8 +0,0 @@
using System.Collections.Generic;
using Orchard.UI.Navigation;
namespace Orchard.Mvc.ViewModels {
public class AdminViewModel : BaseViewModel {
public IEnumerable<MenuItem> AdminMenu { get; set; }
}
}

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using Orchard.Security;
using Orchard.UI.Navigation;
using Orchard.UI.Notify;
@@ -6,15 +7,23 @@ using Orchard.UI.Zones;
namespace Orchard.Mvc.ViewModels {
public class BaseViewModel : IZoneContainer {
public BaseViewModel() {
Messages = new List<NotifyEntry>();
Zones = new ZoneCollection();
private ZoneCollection _zones = new ZoneCollection();
private IList<NotifyEntry> _messages = new List<NotifyEntry>();
public virtual ZoneCollection Zones {
get { return _zones; }
set { _zones = value; }
}
public IList<NotifyEntry> Messages { get; set; }
public IUser CurrentUser { get; set; }
public ZoneCollection Zones { get; set; }
public virtual IList<NotifyEntry> Messages {
get { return _messages; }
set { _messages = value; }
}
public IEnumerable<MenuItem> Menu { get; set; }
public virtual IUser CurrentUser { get; set; }
public virtual IEnumerable<MenuItem> Menu { get; set; }
}
[Obsolete("Please change your code to use BaseViewModel, as AdminViewModel will likely be removed in the near future.")]
public class AdminViewModel : BaseViewModel { }
}

View File

@@ -226,7 +226,7 @@
<Compile Include="Extensions\ExtensionEntry.cs" />
<Compile Include="IOrchardServices.cs" />
<Compile Include="UI\Admin\AdminAttribute.cs" />
<Compile Include="UI\Admin\AdminAuthorizationFilter.cs" />
<Compile Include="UI\Admin\AdminFilter.cs" />
<Compile Include="Mvc\AntiForgery\AntiForgeryAuthorizationFilter.cs" />
<Compile Include="Mvc\Html\FileRegistrationContext.cs" />
<Compile Include="Mvc\Html\MvcFormAntiForgeryPost.cs" />
@@ -286,7 +286,6 @@
<Compile Include="Mvc\ViewEngines\LayoutViewContext.cs" />
<Compile Include="Mvc\ViewEngines\ViewEngineFilter.cs" />
<Compile Include="Mvc\ViewEngines\WebFormsViewEngineProvider.cs" />
<Compile Include="Mvc\ViewModels\AdminViewModel.cs" />
<Compile Include="Mvc\ViewModels\BaseViewModel.cs" />
<Compile Include="UI\Admin\AdminThemeSelector.cs" />
<Compile Include="UI\Navigation\INavigationManager.cs" />
@@ -325,7 +324,7 @@
<Compile Include="Themes\IThemeSelector.cs" />
<Compile Include="Themes\IThemeService.cs" />
<Compile Include="Themes\ThemesModule.cs" />
<Compile Include="UI\Menus\AdminMenuFilter.cs" />
<Compile Include="UI\Navigation\MenuFilter.cs" />
<Compile Include="UI\Navigation\NavigationBuilder.cs" />
<Compile Include="UI\Navigation\INavigationProvider.cs" />
<Compile Include="UI\Navigation\MenuItem.cs" />

View File

@@ -2,15 +2,16 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.Localization;
using Orchard.Mvc.Filters;
using Orchard.Security;
namespace Orchard.UI.Admin {
public class AdminAuthorizationFilter : FilterProvider, IAuthorizationFilter {
public class AdminFilter : FilterProvider, IAuthorizationFilter {
private readonly IAuthorizer _authorizer;
public AdminAuthorizationFilter(IAuthorizer authorizer) {
public AdminFilter(IAuthorizer authorizer) {
_authorizer = authorizer;
T = NullLocalizer.Instance;
}
@@ -23,10 +24,19 @@ namespace Orchard.UI.Admin {
filterContext.Result = new HttpUnauthorizedResult();
}
AdminThemeSelector.Apply(filterContext.RequestContext);
Apply(filterContext.RequestContext);
}
}
public static void Apply(RequestContext context) {
// the value isn't important
context.HttpContext.Items[typeof(AdminThemeSelector)] = null;
}
public static bool IsApplied(RequestContext context) {
return context.HttpContext.Items.Contains(typeof(AdminThemeSelector));
}
private static bool IsAdmin(AuthorizationContext filterContext) {
if (IsNameAdmin(filterContext) || IsNameAdminProxy(filterContext)) {
return true;

View File

@@ -4,20 +4,12 @@ using Orchard.Themes;
namespace Orchard.UI.Admin {
public class AdminThemeSelector : IThemeSelector {
public ThemeSelectorResult GetTheme(RequestContext context) {
if (IsApplied(context)) {
if (AdminFilter.IsApplied(context)) {
return new ThemeSelectorResult { Priority = 100, ThemeName = "TheAdmin" };
}
return null;
}
public static void Apply(RequestContext context) {
// the value isn't important
context.HttpContext.Items[typeof(AdminThemeSelector)] = null;
}
public static bool IsApplied(RequestContext context) {
return context.HttpContext.Items.Contains(typeof(AdminThemeSelector));
}
}
}

View File

@@ -1,30 +0,0 @@
using System.Web.Mvc;
using Orchard.Mvc.Filters;
using Orchard.Mvc.ViewModels;
using Orchard.UI.Navigation;
namespace Orchard.UI.Menus {
public class AdminMenuFilter : FilterProvider, IResultFilter {
private readonly INavigationManager _navigationManager;
public AdminMenuFilter(INavigationManager navigationManager ) {
_navigationManager = navigationManager;
}
public void OnResultExecuting(ResultExecutingContext filterContext) {
var viewResult = filterContext.Result as ViewResult;
if (viewResult == null)
return;
var adminViewModel = viewResult.ViewData.Model as AdminViewModel;
if (adminViewModel == null)
return;
adminViewModel.AdminMenu = _navigationManager.BuildMenu("admin");
}
public void OnResultExecuted(ResultExecutedContext filterContext) {
}
}
}

View File

@@ -1,13 +1,13 @@
using System.Web.Mvc;
using Orchard.Mvc.Filters;
using Orchard.Mvc.ViewModels;
using Orchard.UI.Navigation;
using Orchard.UI.Admin;
namespace Orchard.Core.Navigation.Filters {
public class MainMenuFilter : FilterProvider, IResultFilter {
namespace Orchard.UI.Navigation {
public class MenuFilter : FilterProvider, IResultFilter {
private readonly INavigationManager _navigationManager;
public MainMenuFilter(INavigationManager navigationManager) {
public MenuFilter(INavigationManager navigationManager) {
_navigationManager = navigationManager;
}
@@ -20,10 +20,15 @@ namespace Orchard.Core.Navigation.Filters {
if (baseViewModel == null)
return;
baseViewModel.Menu = _navigationManager.BuildMenu("main");
var menuName = "main";
if (AdminFilter.IsApplied(filterContext.RequestContext))
menuName = "admin";
baseViewModel.Menu = _navigationManager.BuildMenu(menuName);
}
public void OnResultExecuted(ResultExecutedContext filterContext) {
}
}
}