Added default menu position option to AdminMenuPart. If the default position is taken it advances by a minor number (2, 2.1, 2.2, etc). Each type with the part can have a different default position.

--HG--
branch : dev
This commit is contained in:
Dave Reed
2011-03-25 15:56:28 -07:00
parent b5ae02717d
commit 1686ccc007
7 changed files with 122 additions and 17 deletions

View File

@@ -3,6 +3,7 @@ using JetBrains.Annotations;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Core.Navigation.Models;
using Orchard.Core.Navigation.Settings;
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation;
@@ -24,10 +25,26 @@ namespace Orchard.Core.Navigation.Drivers {
public Localizer T { get; set; }
private string GetDefaultPosition(ContentPart part) {
var settings = part.Settings.GetModel<AdminMenuPartTypeSettings>();
var defaultPosition = settings == null ? "" : settings.DefaultPosition;
var adminMenu = _navigationManager.BuildMenu("admin");
if (!string.IsNullOrEmpty(defaultPosition)) {
int major;
return int.TryParse(defaultPosition, out major) ? Position.GetNextMinor(major, adminMenu) : defaultPosition;
}
return Position.GetNext(adminMenu);
}
protected override DriverResult Editor(AdminMenuPart part, dynamic shapeHelper) {
// todo: we need a 'ManageAdminMenu' too?
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, _orchardServices.WorkContext.CurrentUser, part))
if (!_authorizationService.TryCheckAccess(Permissions.ManageMainMenu, _orchardServices.WorkContext.CurrentUser, part)) {
return null;
}
if (string.IsNullOrEmpty(part.AdminMenuPosition)) {
part.AdminMenuPosition = GetDefaultPosition(part);
}
return ContentShape("Parts_Navigation_AdminMenu_Edit",
() => shapeHelper.EditorTemplate(TemplateName: "Parts.Navigation.AdminMenu.Edit", Model: part, Prefix: Prefix));
@@ -39,11 +56,18 @@ namespace Orchard.Core.Navigation.Drivers {
updater.TryUpdateModel(part, Prefix, null, null);
if (part.OnAdminMenu && string.IsNullOrEmpty(part.AdminMenuText))
updater.AddModelError("AdminMenuText", T("The AdminMenuText field is required"));
if (part.OnAdminMenu) {
if (string.IsNullOrEmpty(part.AdminMenuText)) {
updater.AddModelError("AdminMenuText", T("The AdminMenuText field is required"));
}
if (string.IsNullOrEmpty(part.AdminMenuPosition))
part.AdminMenuPosition = Position.GetNext(_navigationManager.BuildMenu("admin"));
if (string.IsNullOrEmpty(part.AdminMenuPosition)) {
part.AdminMenuPosition = GetDefaultPosition(part);
}
}
else {
part.AdminMenuPosition = "";
}
return Editor(part, shapeHelper);
}

View File

@@ -0,0 +1,35 @@
using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models;
using Orchard.ContentManagement.ViewModels;
namespace Orchard.Core.Navigation.Settings {
public class AdminMenuPartTypeSettings {
public string DefaultPosition { get; set; }
}
public class AdminMenuSettingsHooks : ContentDefinitionEditorEventsBase {
public override IEnumerable<TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition) {
if (definition.PartDefinition.Name != "AdminMenuPart") {
yield break;
}
var model = definition.Settings.GetModel<AdminMenuPartTypeSettings>();
yield return DefinitionTemplate(model);
}
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) {
if (builder.Name != "AdminMenuPart") {
yield break;
}
var model = new AdminMenuPartTypeSettings();
updateModel.TryUpdateModel(model, "AdminMenuPartTypeSettings", null, null);
builder.WithSetting("AdminMenuPartTypeSettings.DefaultPosition", model.DefaultPosition);
yield return DefinitionTemplate(model);
}
}
}

View File

@@ -0,0 +1,6 @@
@model Orchard.Core.Navigation.Settings.AdminMenuPartTypeSettings
<fieldset>
<label for="@Html.FieldIdFor(m => m.DefaultPosition)">@T("Default Position")</label>
@Html.EditorFor(m => m.DefaultPosition)
@Html.ValidationMessageFor(m => m.DefaultPosition)
</fieldset>

View File

@@ -115,6 +115,7 @@
<Compile Include="Navigation\Models\AdminMenuPartRecord.cs" />
<Compile Include="Navigation\Services\AdminMenuNavigationProvider.cs" />
<Compile Include="Navigation\Services\MainMenuNavigationProvider.cs" />
<Compile Include="Navigation\Settings\AdminMenuPartTypeSettings.cs" />
<Compile Include="Routable\Events\ISlugEventHandler.cs" />
<Compile Include="Routable\ResourceManifest.cs" />
<Compile Include="Routable\Services\RoutableHomePageProvider.cs" />
@@ -418,6 +419,9 @@
<ItemGroup>
<Content Include="Navigation\Views\EditorTemplates\Parts.Navigation.AdminMenu.Edit.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Navigation\Views\DefinitionTemplates\AdminMenuPartTypeSettings.cshtml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.