diff --git a/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeExportHandler.cs b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeExportHandler.cs new file mode 100644 index 000000000..3d4ebd0d6 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeExportHandler.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using Orchard.Environment.Extensions; +using Orchard.Events; +using Orchard.Themes.Services; + +namespace Orchard.Themes.ImportExport { + public interface IExportEventHandler : IEventHandler { + void Exporting(dynamic context); + void Exported(dynamic context); + } + + [OrchardFeature("Orchard.Themes.ImportExportCurrentTheme")] + public class CurrentThemeExportHandler : IExportEventHandler { + private readonly ISiteThemeService _siteThemeService; + + public CurrentThemeExportHandler(ISiteThemeService siteThemeService) { + _siteThemeService = siteThemeService; + } + + public void Exporting(dynamic context) { } + + public void Exported(dynamic context) { + if (!((IEnumerable)context.ExportOptions.CustomSteps).Contains("CurrentTheme")) { + return; + } + + var currentThemeId = _siteThemeService.GetCurrentThemeName(); + var root = new XElement("CurrentTheme", new XAttribute("id", currentThemeId)); + context.Document.Element("Orchard").Add(root); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeRecipeHandler.cs new file mode 100644 index 000000000..139a1d3b3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeRecipeHandler.cs @@ -0,0 +1,27 @@ +using System; +using Orchard.Environment.Extensions; +using Orchard.Recipes.Models; +using Orchard.Recipes.Services; +using Orchard.Themes.Services; + +namespace Orchard.Themes.ImportExport { + + [OrchardFeature("Orchard.Themes.ImportExportCurrentTheme")] + public class CurrentThemeRecipeHandler : IRecipeHandler { + private readonly ISiteThemeService _siteThemeService; + + public CurrentThemeRecipeHandler(ISiteThemeService siteThemeService) { + _siteThemeService = siteThemeService; + } + + public void ExecuteRecipeStep(RecipeContext context) { + if (!String.Equals(context.RecipeStep.Name, "CurrentTheme", StringComparison.OrdinalIgnoreCase)) { + return; + } + + var themeId = context.RecipeStep.Step.Attribute("id").Value; + _siteThemeService.SetSiteTheme(themeId); + context.Executed = true; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeStep.cs b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeStep.cs new file mode 100644 index 000000000..bd08d06c7 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Themes/ImportExport/CurrentThemeStep.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Orchard.Environment.Extensions; +using Orchard.Events; + +namespace Orchard.Themes.ImportExport { + public interface ICustomExportStep : IEventHandler { + void Register(IList steps); + } + + [OrchardFeature("Orchard.Themes.ImportExportCurrentTheme")] + public class CurrentThemeStep : ICustomExportStep { + + void ICustomExportStep.Register(IList steps) { + steps.Add("CurrentTheme"); + } + } +} + diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Module.txt b/src/Orchard.Web/Modules/Orchard.Themes/Module.txt index 28c9345f1..daa6f8a08 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Themes/Module.txt @@ -8,3 +8,12 @@ OrchardVersion: 1.9 Description: The themes module makes it possible for Orchard applications to customize the look and feel of an Orchard web site. FeatureDescription: Basic theming capability. Category: Core +Features: + Orchard.Themes: + Description: Basic theming capability. + Category: Core + Orchard.Themes.ImportExportCurrentTheme: + Name: Import Export Current Theme + Description: Provides the capability to import and export the current theme. + Category: Deployment + Dependencies: Orchard.ImportExport diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj b/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj index 662185765..852d2de35 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj +++ b/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj @@ -25,6 +25,7 @@ + true @@ -60,6 +61,7 @@ False ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll + @@ -67,6 +69,9 @@ + + + diff --git a/src/Orchard/ContentManagement/Handlers/IdentifyDependenciesContext.cs b/src/Orchard/ContentManagement/Handlers/IdentifyDependenciesContext.cs new file mode 100644 index 000000000..cf9b460de --- /dev/null +++ b/src/Orchard/ContentManagement/Handlers/IdentifyDependenciesContext.cs @@ -0,0 +1,20 @@ +using System; +using System.Xml.Linq; + +namespace Orchard.ContentManagement.Handlers { + public class IdentifyDependenciesContext { + + public IdentifyDependenciesContext(XElement contentElement, ImportContentSession importContentSession) { + ContentElement = contentElement; + ImportContentSession = importContentSession; + } + + public XElement ContentElement { get; set; } + private ImportContentSession ImportContentSession { get; } + + public void RegisterDependency(string id) { + if(!String.IsNullOrWhiteSpace(id)) + ImportContentSession.RegisterDependency(new ContentIdentity(id)); + } + } +} \ No newline at end of file