From 7fae88a87932e7e243b21a0f2be9a27f7d52cdb2 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 14 Sep 2015 23:33:17 +0100 Subject: [PATCH] Implemented output cache routes import/export. Fixes #5805 --- .../Handlers/CacheSettingsPartHandler.cs | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.OutputCache/Handlers/CacheSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.OutputCache/Handlers/CacheSettingsPartHandler.cs index dbcbb2304..f39ae5add 100644 --- a/src/Orchard.Web/Modules/Orchard.OutputCache/Handlers/CacheSettingsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.OutputCache/Handlers/CacheSettingsPartHandler.cs @@ -1,4 +1,7 @@ -using System.Globalization; +using System; +using System.Globalization; +using System.Linq; +using System.Xml.Linq; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.Core.Common.Models; @@ -22,6 +25,9 @@ namespace Orchard.OutputCache.Handlers { // Evict modified routable content when updated. OnPublished((context, part) => Invalidate(part)); + + OnExporting(ExportRouteSettings); + OnImporting(ImportRouteSettings); } private void Invalidate(IContent content) { @@ -36,5 +42,45 @@ namespace Orchard.OutputCache.Handlers { } } } + + private void ExportRouteSettings(ExportContentContext context, CacheSettingsPart part) { + var routes = _cacheService.GetRouteConfigs(); + var routesElement = new XElement("Routes", + routes.Select(x => new XElement("Route") + .Attr("Key", x.RouteKey) + .Attr("Url", x.Url) + .Attr("Priority", x.Priority) + .Attr("Duration", x.Duration) + .Attr("GraceTime", x.GraceTime) + .Attr("MaxAge", x.MaxAge) + .Attr("FeatureName", x.FeatureName))); + + context.Element(part.PartDefinition.Name).Add(routesElement); + } + + private void ImportRouteSettings(ImportContentContext context, CacheSettingsPart part) { + var partElement = context.Data.Element(part.PartDefinition.Name); + + // Don't do anything if the tag is not specified. + if (partElement == null) + return; + + var routesElement = partElement.Element("Routes"); + + if (routesElement == null) + return; + + var routeConfigs = routesElement.Elements().Select(x => new CacheRouteConfig { + RouteKey = x.Attr("Key"), + Duration = x.Attr("Duration"), + Priority = x.Attr("Priority"), + Url = x.Attr("Url"), + MaxAge = x.Attr("MaxAge"), + GraceTime = x.Attr("GraceTime"), + FeatureName = x.Attr("FeatureName") + }); + + _cacheService.SaveRouteConfigs(routeConfigs); + } } } \ No newline at end of file