Remove Routable dependency on IHomePageProvider

--HG--
branch : autoroute
This commit is contained in:
randompete
2011-12-07 23:32:57 +00:00
parent 97c3356edf
commit a5416218db
4 changed files with 3 additions and 113 deletions
@@ -18,16 +18,13 @@ namespace Orchard.Core.Routable.Drivers {
private readonly IOrchardServices _services; private readonly IOrchardServices _services;
private readonly IRoutableService _routableService; private readonly IRoutableService _routableService;
private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IHomePageProvider _routableHomePageProvider;
public RoutePartDriver(IOrchardServices services, public RoutePartDriver(IOrchardServices services,
IRoutableService routableService, IRoutableService routableService,
IEnumerable<IHomePageProvider> homePageProviders,
IHttpContextAccessor httpContextAccessor) { IHttpContextAccessor httpContextAccessor) {
_services = services; _services = services;
_routableService = routableService; _routableService = routableService;
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name);
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@@ -71,7 +68,6 @@ namespace Orchard.Core.Routable.Drivers {
var containerUrl = new UriBuilder(request.ToRootUrlString()) { Path = (request.ApplicationPath ?? "").TrimEnd('/') + "/" + (part.GetContainerPath() ?? "") }; var containerUrl = new UriBuilder(request.ToRootUrlString()) { Path = (request.ApplicationPath ?? "").TrimEnd('/') + "/" + (part.GetContainerPath() ?? "") };
model.ContainerAbsoluteUrl = containerUrl.Uri.ToString().TrimEnd('/'); model.ContainerAbsoluteUrl = containerUrl.Uri.ToString().TrimEnd('/');
model.PromoteToHomePage = model.Id != 0 && _routableHomePageProvider != null && _services.WorkContext.CurrentSite.HomePage == _routableHomePageProvider.GetSettingValue(model.Id);
return ContentShape("Parts_Routable_Edit", return ContentShape("Parts_Routable_Edit",
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)); () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix));
} }
@@ -111,22 +107,12 @@ namespace Orchard.Core.Routable.Drivers {
part.Path = path; part.Path = path;
} }
var promoteToHomePage = context.Attribute(part.PartDefinition.Name, "PromoteToHomePage");
if (promoteToHomePage != null) {
part.PromoteToHomePage = Convert.ToBoolean(promoteToHomePage);
if (part.PromoteToHomePage && _routableHomePageProvider != null) {
_services.WorkContext.CurrentSite.HomePage = _routableHomePageProvider.GetSettingValue(part.ContentItem.Id);
}
}
} }
protected override void Exporting(RoutePart part, ExportContentContext context) { protected override void Exporting(RoutePart part, ExportContentContext context) {
context.Element(part.PartDefinition.Name).SetAttributeValue("Title", part.Title); context.Element(part.PartDefinition.Name).SetAttributeValue("Title", part.Title);
context.Element(part.PartDefinition.Name).SetAttributeValue("Slug", part.Slug); context.Element(part.PartDefinition.Name).SetAttributeValue("Slug", part.Slug);
context.Element(part.PartDefinition.Name).SetAttributeValue("Path", part.Path); context.Element(part.PartDefinition.Name).SetAttributeValue("Path", part.Path);
if (_services.WorkContext.CurrentSite.HomePage == _routableHomePageProvider.GetSettingValue(part.ContentItem.Id)) {
context.Element(part.PartDefinition.Name).SetAttributeValue("PromoteToHomePage", "true");
}
} }
} }
} }
@@ -18,7 +18,6 @@ namespace Orchard.Core.Routable.Handlers {
private readonly IRoutableService _routableService; private readonly IRoutableService _routableService;
private readonly IContentManager _contentManager; private readonly IContentManager _contentManager;
private readonly IWorkContextAccessor _workContextAccessor; private readonly IWorkContextAccessor _workContextAccessor;
private readonly IHomePageProvider _routableHomePageProvider;
public RoutePartHandler( public RoutePartHandler(
IOrchardServices services, IOrchardServices services,
@@ -26,14 +25,12 @@ namespace Orchard.Core.Routable.Handlers {
IRoutablePathConstraint routablePathConstraint, IRoutablePathConstraint routablePathConstraint,
IRoutableService routableService, IRoutableService routableService,
IContentManager contentManager, IContentManager contentManager,
IWorkContextAccessor workContextAccessor, IWorkContextAccessor workContextAccessor) {
IEnumerable<IHomePageProvider> homePageProviders) {
_services = services; _services = services;
_routablePathConstraint = routablePathConstraint; _routablePathConstraint = routablePathConstraint;
_routableService = routableService; _routableService = routableService;
_contentManager = contentManager; _contentManager = contentManager;
_workContextAccessor = workContextAccessor; _workContextAccessor = workContextAccessor;
_routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name);
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
Filters.Add(StorageFilter.For(repository)); Filters.Add(StorageFilter.For(repository));
@@ -51,32 +48,6 @@ namespace Orchard.Core.Routable.Handlers {
Action<PublishContentContext, RoutePart> handler = (context, route) => { Action<PublishContentContext, RoutePart> handler = (context, route) => {
FinalizePath(route, context, processSlug); FinalizePath(route, context, processSlug);
if (_routableHomePageProvider == null)
return;
var homePageSetting = _workContextAccessor.GetContext().CurrentSite.HomePage;
var currentHomePageId = !string.IsNullOrWhiteSpace(homePageSetting)
? _routableHomePageProvider.GetHomePageId(homePageSetting)
: 0;
if (route.Id != 0 && (route.Id == currentHomePageId || route.PromoteToHomePage)) {
if (currentHomePageId != route.Id) {
// reset the path on the current home page
var currentHomePage = _contentManager.Get(currentHomePageId);
if (currentHomePage != null)
FinalizePath(currentHomePage.As<RoutePart>(), context, processSlug);
// set the new home page
_services.WorkContext.CurrentSite.HomePage = _routableHomePageProvider.GetSettingValue(route.ContentItem.Id);
}
// readjust the constraints of the current current home page
_routablePathConstraint.RemovePath(route.Path);
route.Path = "";
_routableService.FixContainedPaths(route);
_routablePathConstraint.AddPath(route.Path);
}
}; };
OnPublished<RoutePart>(handler); OnPublished<RoutePart>(handler);
@@ -128,11 +99,9 @@ namespace Orchard.Core.Routable.Handlers {
public class RoutePartHandlerBase : ContentHandlerBase { public class RoutePartHandlerBase : ContentHandlerBase {
private readonly IWorkContextAccessor _workContextAccessor; private readonly IWorkContextAccessor _workContextAccessor;
private readonly IHomePageProvider _routableHomePageProvider;
public RoutePartHandlerBase(IWorkContextAccessor workContextAccessor, IEnumerable<IHomePageProvider> homePageProviders) { public RoutePartHandlerBase(IWorkContextAccessor workContextAccessor) {
_workContextAccessor = workContextAccessor; _workContextAccessor = workContextAccessor;
_routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name);
} }
public override void GetContentItemMetadata(GetContentItemMetadataContext context) { public override void GetContentItemMetadata(GetContentItemMetadataContext context) {
@@ -144,9 +113,7 @@ namespace Orchard.Core.Routable.Handlers {
// set the display route values if it hasn't been set or only has been set by the Contents module. // set the display route values if it hasn't been set or only has been set by the Contents module.
// allows other modules to set their own display. probably not common enough to warrant some priority implementation // allows other modules to set their own display. probably not common enough to warrant some priority implementation
if (context.Metadata.DisplayRouteValues == null || context.Metadata.DisplayRouteValues["Area"] as string == "Contents") { if (context.Metadata.DisplayRouteValues == null || context.Metadata.DisplayRouteValues["Area"] as string == "Contents") {
var itemPath = routable.Id == _routableHomePageProvider.GetHomePageId(_workContextAccessor.GetContext().CurrentSite.HomePage) var itemPath = routable.Path;
? ""
: routable.Path;
context.Metadata.DisplayRouteValues = new RouteValueDictionary { context.Metadata.DisplayRouteValues = new RouteValueDictionary {
{"Area", "Routable"}, {"Area", "Routable"},
@@ -1,59 +0,0 @@
using System;
using System.Web.Mvc;
using JetBrains.Annotations;
using Orchard.Core.Routable.Models;
using Orchard.DisplayManagement;
using Orchard.Localization;
using Orchard.Services;
using Orchard.ContentManagement;
namespace Orchard.Core.Routable.Services {
[UsedImplicitly]
public class RoutableHomePageProvider : IHomePageProvider {
private readonly IContentManager _contentManager;
public const string Name = "RoutableHomePageProvider";
public RoutableHomePageProvider(
IContentManager contentManager,
IShapeFactory shapeFactory) {
_contentManager = contentManager;
Shape = shapeFactory;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
dynamic Shape { get; set; }
public string GetProviderName() {
return Name;
}
public string GetSettingValue(int id) {
return GetProviderName() + ";" + id;
}
public int GetHomePageId(string value) {
int id;
if (string.IsNullOrWhiteSpace(value) || !int.TryParse(value.Substring(Name.Length + 1), out id))
throw new ApplicationException(T("Invalid home page setting value for {0}: {1}", Name, value).Text);
return id;
}
public ActionResult GetHomePage(int id) {
var contentItem = _contentManager.Get(id, VersionOptions.Published);
if (contentItem == null || !contentItem.Is<RoutePart>())
return new HttpNotFoundResult();
// get the display metadata for the home page item
var displayRouteValues = _contentManager.GetItemMetadata(contentItem).DisplayRouteValues;
var model = Shape.ViewModel(RouteValues: displayRouteValues);
return new PartialViewResult {
ViewName = "Routable.HomePage",
ViewData = new ViewDataDictionary<object>(model)
};
}
}
}
@@ -1,4 +0,0 @@
@{
RouteValueDictionary routeValues = Model.RouteValues;
Html.RenderAction(routeValues["action"] as string, routeValues["controller"] as string, routeValues);
}