diff --git a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs index eb4d6daf1..da324b958 100644 --- a/src/Orchard.Tests/Models/DefaultModelManagerTests.cs +++ b/src/Orchard.Tests/Models/DefaultModelManagerTests.cs @@ -172,7 +172,26 @@ namespace Orchard.Tests.Models { return modelRecord; } + [Test] + public void EditorsShouldBeOrderedByPositionAndDefaultPositionIsSix() { + var alpha = _manager.New("alpha"); + var templates = _manager.GetDisplays(alpha); + Assert.That(templates.Count(), Is.EqualTo(3)); + var t0 = templates.First(); + var t1 = templates.Skip(1).First(); + var t2 = templates.Skip(2).First(); + + Assert.That(t0.Model, Is.TypeOf()); + Assert.That(t1.Model, Is.TypeOf()); + Assert.That(t2.Model, Is.TypeOf()); + + Assert.That(t0.Position, Is.EqualTo("3")); + Assert.That(t1.Position, Is.Null); + Assert.That(t2.Position, Is.EqualTo("10")); + + + } } } diff --git a/src/Orchard.Tests/Models/Stubs/AlphaProvider.cs b/src/Orchard.Tests/Models/Stubs/AlphaProvider.cs index 6b938d0e0..570017524 100644 --- a/src/Orchard.Tests/Models/Stubs/AlphaProvider.cs +++ b/src/Orchard.Tests/Models/Stubs/AlphaProvider.cs @@ -1,10 +1,15 @@ -using Orchard.Models; +using System.Collections.Generic; +using Orchard.Models; using Orchard.Models.Driver; +using Orchard.UI.Models; namespace Orchard.Tests.Models.Stubs { public class AlphaProvider : ContentProvider { - public override System.Collections.Generic.IEnumerable GetContentTypes() { - return new[] {new ContentType {Name = "alpha"}}; + public AlphaProvider() { + OnGetDisplays((ctx, part) => ctx.Displays.Add(new ModelTemplate(part) { Position = "3" })); + } + public override IEnumerable GetContentTypes() { + return new[] { new ContentType { Name = "alpha" } }; } protected override void Activating(ActivatingContentContext context) { if (context.ContentType == "alpha") { diff --git a/src/Orchard.Tests/Models/Stubs/FlavoredProvider.cs b/src/Orchard.Tests/Models/Stubs/FlavoredProvider.cs index 0c0015f19..f615660c6 100644 --- a/src/Orchard.Tests/Models/Stubs/FlavoredProvider.cs +++ b/src/Orchard.Tests/Models/Stubs/FlavoredProvider.cs @@ -1,7 +1,11 @@ using Orchard.Models.Driver; +using Orchard.UI.Models; namespace Orchard.Tests.Models.Stubs { public class FlavoredProvider : ContentProvider { + public FlavoredProvider() { + OnGetDisplays((ctx, part) => ctx.Displays.Add(new ModelTemplate(part))); + } protected override void Activating(ActivatingContentContext context) { if (context.ContentType == "beta" || context.ContentType == "alpha") { context.Builder.Weld(); diff --git a/src/Orchard.Tests/Models/Stubs/StyledProvider.cs b/src/Orchard.Tests/Models/Stubs/StyledProvider.cs index 1c9be292b..823a04aa5 100644 --- a/src/Orchard.Tests/Models/Stubs/StyledProvider.cs +++ b/src/Orchard.Tests/Models/Stubs/StyledProvider.cs @@ -1,7 +1,12 @@ using Orchard.Models.Driver; +using Orchard.UI.Models; namespace Orchard.Tests.Models.Stubs { public class StyledProvider : ContentProvider { + public StyledProvider() { + OnGetDisplays((ctx, part) => ctx.Displays.Add(new ModelTemplate(part) { Position = "10" })); + } + protected override void Activating(ActivatingContentContext context) { if (context.ContentType == "alpha") { context.Builder.Weld(); diff --git a/src/Orchard/Models/DefaultContentManager.cs b/src/Orchard/Models/DefaultContentManager.cs index 2ce07df3c..5e5801507 100644 --- a/src/Orchard/Models/DefaultContentManager.cs +++ b/src/Orchard/Models/DefaultContentManager.cs @@ -1,10 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Autofac; using Orchard.Data; using Orchard.Models.Driver; using Orchard.Models.Records; using Orchard.UI.Models; +using Orchard.UI.Navigation; namespace Orchard.Models { public class DefaultContentManager : IContentManager { @@ -125,7 +127,7 @@ namespace Orchard.Models { foreach (var driver in Drivers) { driver.GetDisplays(context); } - return context.Displays; + return OrderTemplates(context.Displays); } public IEnumerable GetEditors(IContent content) { @@ -133,7 +135,7 @@ namespace Orchard.Models { foreach (var driver in Drivers) { driver.GetEditors(context); } - return context.Editors; + return OrderTemplates(context.Editors); } public IEnumerable UpdateEditors(IContent content, IUpdateModel updater) { @@ -141,7 +143,13 @@ namespace Orchard.Models { foreach (var driver in Drivers) { driver.UpdateEditors(context); } - return context.Editors; + return OrderTemplates(context.Editors); + } + + private static IEnumerable OrderTemplates(IEnumerable templates) { + var comparer = new PositionComparer(); + return templates.OrderBy(x => x.Position ?? "6", comparer); + } public IContentQuery Query() { diff --git a/src/Orchard/UI/Models/ModelTemplate.cs b/src/Orchard/UI/Models/ModelTemplate.cs index 9fc18db88..b60514a2a 100644 --- a/src/Orchard/UI/Models/ModelTemplate.cs +++ b/src/Orchard/UI/Models/ModelTemplate.cs @@ -13,5 +13,6 @@ public string Prefix { get; set; } public string TemplateName { get; set; } + public string Position { get; set; } } }