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