diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index a928654da..9d66a5dde 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -214,7 +214,6 @@ - diff --git a/src/Orchard.Web/Core/Settings/Drivers/SiteSettings2PartDriver.cs b/src/Orchard.Web/Core/Settings/Drivers/SiteSettings2PartDriver.cs deleted file mode 100644 index 93456225d..000000000 --- a/src/Orchard.Web/Core/Settings/Drivers/SiteSettings2PartDriver.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; -using Orchard.Core.Settings.Models; -using Orchard.Localization; -using Orchard.Logging; -using Orchard.Settings; - -namespace Orchard.Core.Settings.Drivers -{ - public class SiteSettings2PartDriver : ContentPartDriver { - public SiteSettings2PartDriver() { - T = NullLocalizer.Instance; - Logger = NullLogger.Instance; - } - - public Localizer T { get; set; } - public ILogger Logger { get; set; } - - protected override void Exporting(SiteSettings2Part part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(SiteSettings2Part part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs b/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs index 064c77e90..81cd50525 100644 --- a/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs +++ b/src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs @@ -3,7 +3,6 @@ using System.Net; using JetBrains.Annotations; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; using Orchard.Core.Settings.Models; using Orchard.Core.Settings.ViewModels; using Orchard.Localization.Services; @@ -102,13 +101,5 @@ namespace Orchard.Core.Settings.Drivers { return ContentShape("Parts_Settings_SiteSettingsPart", () => shapeHelper.EditorTemplate(TemplateName: "Parts.Settings.SiteSettingsPart", Model: model, Prefix: Prefix)); } - - protected override void Exporting(SiteSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(SiteSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentSettingsPartDriver.cs index c74593b49..4e06b09d5 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentSettingsPartDriver.cs @@ -2,9 +2,7 @@ using Orchard.Comments.Models; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; using Orchard.Localization; -using Orchard.Settings; namespace Orchard.Comments.Drivers { public class CommentSettingsPartDriver : ContentPartDriver { @@ -30,13 +28,5 @@ namespace Orchard.Comments.Drivers { }) .OnGroup("comments"); } - - protected override void Exporting(CommentSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(CommentSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs index c0430dc1b..c009122db 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Drivers/SmtpSettingsPartDriver.cs @@ -1,10 +1,8 @@ using System; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; using Orchard.Email.Models; using Orchard.Localization; -using Orchard.Settings; namespace Orchard.Email.Drivers { @@ -41,13 +39,5 @@ namespace Orchard.Email.Drivers { }) .OnGroup("email"); } - - protected override void Exporting(SmtpSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(SmtpSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj index 680a6872e..09f71bdd8 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj +++ b/src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj @@ -53,8 +53,6 @@ ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll - - diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs index 4709da212..c481be81a 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs @@ -5,6 +5,7 @@ using System.Xml; using System.Xml.Linq; using JetBrains.Annotations; using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; using Orchard.Environment.Descriptor; using Orchard.FileSystems.AppData; @@ -139,10 +140,50 @@ namespace Orchard.ImportExport.Services { } private XElement ExportSiteSettings() { - var exportContentItem = ExportContentItem(_orchardServices.WorkContext.CurrentSite.ContentItem); - return new XElement("Settings", exportContentItem.Elements()); + var siteContentItem = _orchardServices.WorkContext.CurrentSite.ContentItem; + var exportedElements = ExportContentItem(siteContentItem).Elements().ToList(); + + foreach (var contentPart in siteContentItem.Parts) { + var exportedElement = exportedElements.FirstOrDefault(element => element.Name == contentPart.PartDefinition.Name); + + //Get all simple attributes if exported element is null + //Get exclude the simple attributes that already exist if element is not null + var simpleAttributes = + ExportSettingsPartAttributes(contentPart) + .Where(attribute => exportedElement == null || exportedElement.Attributes().All(xAttribute => xAttribute.Name != attribute.Name)) + .ToList(); + + if (simpleAttributes.Any()) { + if (exportedElement == null) { + exportedElement = new XElement(contentPart.PartDefinition.Name); + exportedElements.Add(exportedElement); + } + + exportedElement.Add(simpleAttributes); + } + } + + return new XElement("Settings", exportedElements); } + private IEnumerable ExportSettingsPartAttributes(ContentPart sitePart) { + foreach (var property in sitePart.GetType().GetProperties()) { + var propertyType = property.PropertyType; + + // Supported types (we also know they are not indexed properties). + if (propertyType == typeof(string) || propertyType == typeof(bool) || propertyType == typeof(int)) { + // Exclude read-only properties. + if (property.GetSetMethod() != null) { + var value = property.GetValue(sitePart, null); + if (value == null) + continue; + + yield return new XAttribute(property.Name, value); + } + } + } + } + private XElement ExportData(IEnumerable contentTypes, IEnumerable contentItems, int? batchSize) { var data = new XElement("Data"); diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/WebSearchSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/WebSearchSettingsPartDriver.cs deleted file mode 100644 index aa64bd654..000000000 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Drivers/WebSearchSettingsPartDriver.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; -using Orchard.Localization; -using Orchard.Logging; -using Orchard.MediaLibrary.Models; -using Orchard.Settings; - -namespace Orchard.MediaLibrary.Drivers -{ - public class WebSearchSettingsPartDriver : ContentPartDriver { - public WebSearchSettingsPartDriver() - { - T = NullLocalizer.Instance; - Logger = NullLogger.Instance; - } - - public Localizer T { get; set; } - public ILogger Logger { get; set; } - - protected override void Exporting(WebSearchSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(WebSearchSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index efe7356a1..83ace0c1d 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -98,7 +98,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.Messaging/Drivers/MessageSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Messaging/Drivers/MessageSettingsPartDriver.cs index 1554256fd..cbc319c69 100644 --- a/src/Orchard.Web/Modules/Orchard.Messaging/Drivers/MessageSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Messaging/Drivers/MessageSettingsPartDriver.cs @@ -1,12 +1,10 @@ using JetBrains.Annotations; using Orchard.ContentManagement; using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; using Orchard.Localization; using Orchard.Messaging.Models; using Orchard.Messaging.Services; using Orchard.Messaging.ViewModels; -using Orchard.Settings; namespace Orchard.Messaging.Drivers { [UsedImplicitly] @@ -45,13 +43,5 @@ namespace Orchard.Messaging.Drivers { return ContentShape("Parts_MessageSettings_Edit", () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)); } - - protected override void Exporting(MessageSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(MessageSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.OutputCache/Drivers/CacheSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.OutputCache/Drivers/CacheSettingsPartDriver.cs deleted file mode 100644 index 9dd3b3378..000000000 --- a/src/Orchard.Web/Modules/Orchard.OutputCache/Drivers/CacheSettingsPartDriver.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; -using Orchard.Localization; -using Orchard.Logging; -using Orchard.OutputCache.Models; -using Orchard.Settings; - -namespace Orchard.OutputCache.Drivers -{ - public class CacheSettingsPartDriver : ContentPartDriver { - public CacheSettingsPartDriver() - { - T = NullLocalizer.Instance; - Logger = NullLogger.Instance; - } - - public Localizer T { get; set; } - public ILogger Logger { get; set; } - - protected override void Exporting(CacheSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(CacheSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.OutputCache/Orchard.OutputCache.csproj b/src/Orchard.Web/Modules/Orchard.OutputCache/Orchard.OutputCache.csproj index 7b804868a..c9a23d76e 100644 --- a/src/Orchard.Web/Modules/Orchard.OutputCache/Orchard.OutputCache.csproj +++ b/src/Orchard.Web/Modules/Orchard.OutputCache/Orchard.OutputCache.csproj @@ -90,7 +90,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/SettingsRecipeHandler.cs b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/SettingsRecipeHandler.cs index cbf8993df..1bf4e6548 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/SettingsRecipeHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/SettingsRecipeHandler.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Security.Policy; using System.Xml; using System.Xml.Linq; using Orchard.ContentManagement; @@ -40,20 +41,53 @@ namespace Orchard.Recipes.RecipeHandlers { return; } - var site = _siteService.GetSiteSettings(); + var siteContentItem = _siteService.GetSiteSettings().ContentItem; var importContentSession = new ImportContentSession(_contentManager); - var context = new ImportContentContext(site.ContentItem, recipeContext.RecipeStep.Step, importContentSession); + var context = new ImportContentContext(siteContentItem, recipeContext.RecipeStep.Step, importContentSession); foreach (var contentHandler in Handlers) { contentHandler.Importing(context); } + foreach (var contentPart in siteContentItem.Parts) { + var partElement = context.Data.Element(contentPart.PartDefinition.Name); + if (partElement == null) { + continue; + } + + ImportSettingPart(contentPart, partElement); + } + foreach (var contentHandler in Handlers) { contentHandler.Imported(context); } recipeContext.Executed = true; } + + private void ImportSettingPart(ContentPart sitePart, XElement element) { + + foreach (var attribute in element.Attributes()) { + var attributeName = attribute.Name.LocalName; + var attributeValue = attribute.Value; + + var property = sitePart.GetType().GetProperty(attributeName); + if (property == null) { + throw new InvalidOperationException(string.Format("Could set setting {0} for part {1} because it was not found.", attributeName, sitePart.PartDefinition.Name)); + } + + var propertyType = property.PropertyType; + if (propertyType == typeof(string)) { + property.SetValue(sitePart, attributeValue, null); + } + else if (propertyType == typeof(bool)) { + property.SetValue(sitePart, Boolean.Parse(attributeValue), null); + } + else if (propertyType == typeof(int)) { + property.SetValue(sitePart, Int32.Parse(attributeValue), null); + } + } + } } } diff --git a/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs index 2adf8eaa1..9e35a324b 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs @@ -65,7 +65,6 @@ namespace Orchard.Search.Drivers { } protected override void Exporting(SearchSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); context.Element(part.PartDefinition.Name).Add(new XAttribute("SearchedFields", string.Join(",", part.SearchedFields))); } @@ -73,10 +72,10 @@ namespace Orchard.Search.Drivers { var xElement = context.Data.Element(part.PartDefinition.Name); if (xElement == null) return; - DefaultSettingsPartImportExport.ImportSettingPart(part, xElement); - var searchedFields = xElement.Attribute("SearchedFields"); - part.SearchedFields = searchedFields.Value.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries); + searchedFields.Remove(); + + part.SearchedFields = searchedFields.Value.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Drivers/ThemeSiteSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Themes/Drivers/ThemeSiteSettingsPartDriver.cs deleted file mode 100644 index 34c8f3918..000000000 --- a/src/Orchard.Web/Modules/Orchard.Themes/Drivers/ThemeSiteSettingsPartDriver.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; -using Orchard.Localization; -using Orchard.Logging; -using Orchard.Settings; -using Orchard.Themes.Models; - -namespace Orchard.Themes.Drivers -{ - public class ThemeSiteSettingsPartDriver : ContentPartDriver { - public ThemeSiteSettingsPartDriver() - { - T = NullLocalizer.Instance; - Logger = NullLogger.Instance; - } - - public Localizer T { get; set; } - public ILogger Logger { get; set; } - - protected override void Exporting(ThemeSiteSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - - protected override void Importing(ThemeSiteSettingsPart part, ImportContentContext context) { - DefaultSettingsPartImportExport.ImportSettingPart(part, context.Data.Element(part.PartDefinition.Name)); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj b/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj index eab80c367..7db1f19c6 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj +++ b/src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj @@ -20,11 +20,6 @@ - false - - - - true @@ -53,13 +48,10 @@ False ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll - - - diff --git a/src/Orchard.Web/Modules/Orchard.Users/Drivers/RegistrationSettingsPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Users/Drivers/RegistrationSettingsPartDriver.cs deleted file mode 100644 index 23e5bc53c..000000000 --- a/src/Orchard.Web/Modules/Orchard.Users/Drivers/RegistrationSettingsPartDriver.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Orchard.ContentManagement.Drivers; -using Orchard.ContentManagement.Handlers; -using Orchard.Localization; -using Orchard.Logging; -using Orchard.Settings; -using Orchard.Users.Models; - -namespace Orchard.Users.Drivers -{ - public class RegistrationSettingsPartDriver : ContentPartDriver { - public RegistrationSettingsPartDriver() - { - T = NullLocalizer.Instance; - Logger = NullLogger.Instance; - } - - public Localizer T { get; set; } - public ILogger Logger { get; set; } - - protected override void Exporting(RegistrationSettingsPart part, ExportContentContext context) { - DefaultSettingsPartImportExport.ExportSettingsPart(part, context); - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index bda180931..7878803b5 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -64,7 +64,6 @@ - diff --git a/src/Orchard/ContentManagement/Drivers/DefaultSettingsPartImportExport.cs b/src/Orchard/ContentManagement/Drivers/DefaultSettingsPartImportExport.cs deleted file mode 100644 index f784ce2e5..000000000 --- a/src/Orchard/ContentManagement/Drivers/DefaultSettingsPartImportExport.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml; -using System.Xml.Linq; -using Orchard.ContentManagement.Handlers; -using Orchard.Recipes.Models; -using Orchard.Settings; - -namespace Orchard.ContentManagement.Drivers -{ - public class DefaultSettingsPartImportExport - { - public static void ExportSettingsPart(ContentPart sitePart, ExportContentContext context) { - var xAttributes = new List(); - foreach (var property in sitePart.GetType().GetProperties()) { - var propertyType = property.PropertyType; - - // Supported types (we also know they are not indexed properties). - if (propertyType == typeof (string) || propertyType == typeof (bool) || propertyType == typeof (int)) { - - // Exclude read-only properties. - if (property.GetSetMethod() != null) { - var value = property.GetValue(sitePart, null); - if (value == null) - continue; - - xAttributes.Add(new XAttribute(property.Name, value)); - } - } - } - - if(xAttributes.Any()) { - context.Element(sitePart.PartDefinition.Name).Add(xAttributes.ToArray()); - } - } - - public static void ImportSettingPart(ContentPart sitePart, XElement element) { - if(element == null) - return; - - foreach (var attribute in element.Attributes()) { - var attributeName = attribute.Name.LocalName; - var attributeValue = attribute.Value; - - var property = sitePart.GetType().GetProperty(attributeName); - if (property == null) { - throw new InvalidOperationException(string.Format("Could set setting {0} for part {1} because it was not found.", attributeName, sitePart.PartDefinition.Name)); - } - - var propertyType = property.PropertyType; - if (propertyType == typeof(string)) { - property.SetValue(sitePart, attributeValue, null); - } - else if (propertyType == typeof(bool)) { - property.SetValue(sitePart, Boolean.Parse(attributeValue), null); - } - else if (propertyType == typeof(int)) { - property.SetValue(sitePart, Int32.Parse(attributeValue), null); - } - } - } - } -} - diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 8c90d4a10..fa0446aa1 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -302,7 +302,6 @@ -