--HG--
branch : 1.x
This commit is contained in:
Renaud Paquay
2011-05-25 17:47:02 -07:00
14 changed files with 91 additions and 50 deletions

View File

@@ -31,6 +31,7 @@ namespace Orchard.Tests.Modules.Widgets.Services {
private const string ThemeZoneName1 = "sidebar";
private const string ThemeZoneName2 = "alternative";
private const string DuplicateZoneNames = "sidebar,alternative, sidebar , alternative ";
private const string LayerName1 = "Test layer 1";
private const string LayerDescription1 = "Test layer 1";
@@ -78,10 +79,12 @@ namespace Orchard.Tests.Modules.Widgets.Services {
public override void Register(ContainerBuilder builder) {
var mockFeatureManager = new Mock<IFeatureManager>();
var theme1 = new FeatureDescriptor {Extension = new ExtensionDescriptor {Zones = ThemeZoneName1}};
var theme2 = new FeatureDescriptor {Extension = new ExtensionDescriptor {Zones = ThemeZoneName2}};
var theme1 = new FeatureDescriptor {Extension = new ExtensionDescriptor { Zones = ThemeZoneName1, ExtensionType = "Theme" }};
var theme2 = new FeatureDescriptor { Extension = new ExtensionDescriptor { Zones = ThemeZoneName2, ExtensionType = "Theme" } };
var theme3 = new FeatureDescriptor { Extension = new ExtensionDescriptor { Zones = DuplicateZoneNames, ExtensionType = "Theme" } };
var module1 = new FeatureDescriptor { Extension = new ExtensionDescriptor { Zones = "DontSeeMeBecauseIAmNotATheme", ExtensionType = "Module" } };
mockFeatureManager.Setup(x => x.GetEnabledFeatures())
.Returns(new[] { theme1, theme2 });
.Returns(new[] { theme1, theme2, theme3, module1 });
builder.RegisterType<DefaultContentManager>().As<IContentManager>();
builder.RegisterType<DefaultContentManagerSession>().As<IContentManagerSession>();
@@ -200,10 +203,10 @@ namespace Orchard.Tests.Modules.Widgets.Services {
}
[Test]
[Ignore("Needs fixing")]
//[Ignore("Needs fixing")]
public void GetZonesTest() {
IEnumerable<string> zones = _widgetService.GetZones();
Assert.That(zones.Count(), Is.EqualTo(2), "One zone on the mock list");
Assert.That(zones.Count(), Is.EqualTo(2), "Two zones on the mock list");
Assert.That(zones.FirstOrDefault(zone => zone == ThemeZoneName1), Is.Not.Null);
Assert.That(zones.FirstOrDefault(zone => zone == ThemeZoneName2), Is.Not.Null);
}

View File

@@ -1,4 +1,6 @@
using System.Web.Mvc;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Autofac;
using NUnit.Framework;
using Orchard.Environment;
@@ -11,5 +13,34 @@ namespace Orchard.Tests.Environment {
var host = OrchardStarter.CreateHost(b => b.RegisterInstance(new ControllerBuilder()));
Assert.That(host, Is.TypeOf<DefaultOrchardHost>());
}
[Test]
public void ContainerResolvesServicesInSameOrderTheyAreRegistered() {
var container = OrchardStarter.CreateHostContainer(builder => {
builder.RegisterType<Component1>().As<IServiceA>();
builder.RegisterType<Component2>().As<IServiceA>();
});
var services = container.Resolve<IEnumerable<IServiceA>>();
Assert.That(services.Count(), Is.EqualTo(2));
Assert.That(services.First(), Is.TypeOf<Component1>());
Assert.That(services.Last(), Is.TypeOf<Component2>());
}
[Test]
public void MostRecentlyRegisteredServiceReturnsFromSingularResolve() {
var container = OrchardStarter.CreateHostContainer(builder => {
builder.RegisterType<Component1>().As<IServiceA>();
builder.RegisterType<Component2>().As<IServiceA>();
});
var service = container.Resolve<IServiceA>();
Assert.That(service, Is.Not.Null);
Assert.That(service, Is.TypeOf<Component2>());
}
public interface IServiceA {}
public class Component1 : IServiceA {}
public class Component2 : IServiceA {}
}
}

View File

@@ -7,6 +7,7 @@ using Orchard.Core.Containers.Extensions;
using Orchard.Core.Containers.Models;
using Orchard.Core.Routable.Models;
using Orchard.DisplayManagement;
using Orchard.Mvc;
using Orchard.Themes;
using Orchard.UI.Navigation;
using Orchard.Settings;
@@ -71,14 +72,16 @@ namespace Orchard.Core.Containers.Controllers {
var list = Shape.List();
list.AddRange(pageOfItems.Select(item => _contentManager.BuildDisplay(item, "Summary")));
list.Classes.Add("content-items");
list.Classes.Add("list-items");
dynamic viewModel = Shape.ViewModel()
.ContentItems(list)
.Pager(pagerShape)
.ShowPager(container.As<ContainerPart>().Record.Paginated);
var model = _contentManager.BuildDisplay(container, "Detail");
model.Content.Add(list, "7");
if (container.As<ContainerPart>().Record.Paginated) {
model.Content.Add(pagerShape, "7.5");
}
// Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation.
return View((object)viewModel);
return new ShapeResult(this, model);
}
}
}

View File

@@ -1,9 +0,0 @@
@{
IEnumerable<object> items = Model.ContentItems;
Model.ContentItems.Classes.Add("content-items");
Model.ContentItems.Classes.Add("list-items");
}
@Display(items)
@if (Model.ShowPager) {
@Display(Model.Pager)
}

View File

@@ -386,7 +386,6 @@
<Content Include="Containers\Placement.info" />
<Content Include="Containers\Views\EditorTemplates\ContainerWidget.cshtml" />
<Content Include="Containers\Views\EditorTemplates\Container.cshtml" />
<Content Include="Containers\Views\Item\Display.cshtml" />
<Content Include="Containers\Views\DefinitionTemplates\ContainerPartSettings.cshtml" />
<Content Include="Containers\Views\DefinitionTemplates\ContainerTypePartSettings.cshtml" />
<Content Include="Containers\Views\EditorTemplates\Containable.cshtml" />

View File

@@ -2,8 +2,6 @@
@{
Style.Require("ContentTypesAdmin");
Script.Require("jQuery");
Script.Include("admin.js");
Layout.Title = T("Edit Content Type").ToString();
}

View File

@@ -2,8 +2,6 @@
@{
Style.Require("ContentTypesAdmin");
Script.Require("jQuery");
Script.Include("admin.js");
Layout.Title = T("Edit Part").ToString();
}

View File

@@ -3,6 +3,11 @@
<!--
Parts_Container_Contained_SummaryAdmin
-->
<Match ContentType="List" DisplayType="Detail">
<!-- don't show the List title or Common Metadata -->
<Place Parts_RoutableTitle="-" />
<Place Parts_Common_Metadata="-" />
</Match>
<Match DisplayType="SummaryAdmin">
<Place Parts_Container_Contained_SummaryAdmin="Actions:10"/>
</Match>

View File

@@ -2,8 +2,6 @@
using Orchard.ContentManagement;
using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Models;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Themes.Models;
namespace Orchard.Themes.Services {
@@ -17,7 +15,6 @@ namespace Orchard.Themes.Services {
public const string CurrentThemeSignal = "SiteCurrentTheme";
private readonly IExtensionManager _extensionManager;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly ICacheManager _cacheManager;
private readonly ISignals _signals;
private readonly IOrchardServices _orchardServices;
@@ -25,22 +22,14 @@ namespace Orchard.Themes.Services {
public SiteThemeService(
IOrchardServices orchardServices,
IExtensionManager extensionManager,
IWorkContextAccessor workContextAccessor,
ICacheManager cacheManager,
ISignals signals) {
_orchardServices = orchardServices;
_extensionManager = extensionManager;
_workContextAccessor = workContextAccessor;
_cacheManager = cacheManager;
_signals = signals;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ExtensionDescriptor GetSiteTheme() {
string currentThemeName = GetCurrentThemeName();
@@ -48,7 +37,7 @@ namespace Orchard.Themes.Services {
}
public void SetSiteTheme(string themeName) {
var site = _workContextAccessor.GetContext().CurrentSite;
var site = _orchardServices.WorkContext.CurrentSite;
site.As<ThemeSiteSettingsPart>().CurrentThemeName = themeName;
_signals.Trigger(CurrentThemeSignal);

View File

@@ -69,9 +69,9 @@ namespace Orchard.Widgets.Services {
return _featureManager.GetEnabledFeatures()
.Select(x => x.Extension)
.Where(x => DefaultExtensionTypes.IsTheme(x.ExtensionType) && x.Zones != null)
.SelectMany(x => x.Zones.Split(','))
.Distinct()
.SelectMany(x => x.Zones.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
.Select(x => x.Trim())
.Distinct()
.ToArray();
}
@@ -80,9 +80,9 @@ namespace Orchard.Widgets.Services {
// get the zones for this theme
if (theme.Zones != null)
zones = theme.Zones.Split(',')
.Distinct()
zones = theme.Zones.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Trim())
.Distinct()
.ToList();
// if this theme has no zones defined then walk the BaseTheme chain until we hit a theme which defines zones
@@ -90,9 +90,9 @@ namespace Orchard.Widgets.Services {
string baseTheme = theme.BaseTheme;
theme = _extensionManager.GetExtension(baseTheme);
if (theme != null && theme.Zones != null)
zones = theme.Zones.Split(',')
.Distinct()
zones = theme.Zones.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Trim())
.Distinct()
.ToList();
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections;
using Autofac.Core;
namespace Orchard.Environment {
internal class CollectionOrderModule : IModule {
public void Configure(IComponentRegistry componentRegistry) {
componentRegistry.Registered += (sender, registered) => {
// only bother watching enumerable resolves
var limitType = registered.ComponentRegistration.Activator.LimitType;
if (typeof(IEnumerable).IsAssignableFrom(limitType)) {
registered.ComponentRegistration.Activated += (sender2, activated) => {
// Autofac's IEnumerable feature returns an Array
if (activated.Instance is Array) {
// Orchard needs FIFO, not FILO, component order
Array.Reverse((Array)activated.Instance);
}
};
}
};
}
}
}

View File

@@ -31,6 +31,7 @@ namespace Orchard.Environment {
public static class OrchardStarter {
public static IContainer CreateHostContainer(Action<ContainerBuilder> registrations) {
var builder = new ContainerBuilder();
builder.RegisterModule(new CollectionOrderModule());
builder.RegisterModule(new LoggingModule());
builder.RegisterModule(new EventsModule());
builder.RegisterModule(new CacheModule());

View File

@@ -56,7 +56,6 @@ namespace Orchard.Mvc {
return (Type) info.Metadata["ControllerType"];
}
// fail as appropriate for MVC's expectations
return null;
}
@@ -74,7 +73,7 @@ namespace Orchard.Mvc {
}
// fail as appropriate for MVC's expectations
return null;
return base.GetControllerInstance(requestContext, controllerType);
}
}
}

View File

@@ -174,6 +174,7 @@
<Compile Include="DisplayManagement\Implementation\IShapeFactoryEvents.cs" />
<Compile Include="DisplayManagement\Shapes\ShapeDebugView.cs" />
<Compile Include="DisplayManagement\Shapes\ITagBuilderFactory.cs" />
<Compile Include="Environment\CollectionOrderModule.cs" />
<Compile Include="Environment\Extensions\OrchardSuppressDependencyAttribute.cs" />
<Compile Include="Environment\Features\IFeatureManager.cs" />
<Compile Include="Environment\IAssemblyNameResolver.cs" />