From c0ae3f420e77f573f5ea891e80973052e2db8d3b Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Mon, 28 Oct 2013 17:43:32 -0700 Subject: [PATCH] Migrating SiteSettingsPart --- .../Feeds/Controllers/FeedControllerTests.cs | 2 + .../DatabaseEnabledTestsBase.cs | 3 + .../Themes/Services/ThemeServiceTests.cs | 1 - .../Controllers/AccountControllerTests.cs | 2 - src/Orchard.Tests/DatabaseEnabledTestsBase.cs | 3 + .../Core/Common/Models/BodyPart.cs | 5 +- .../Core/Common/Models/CommonPart.cs | 51 ++++------- .../Core/Common/Models/IdentityPart.cs | 5 +- .../Core/Navigation/Models/MenuWidgetPart.cs | 21 ++--- .../Navigation/Services/MainMenuService.cs | 2 +- src/Orchard.Web/Core/Orchard.Core.csproj | 4 +- .../Handlers/SiteSettingsPartHandler.cs | 6 +- src/Orchard.Web/Core/Settings/Migrations.cs | 23 +---- .../Core/Settings/Models/SiteSettings2Part.cs | 12 --- .../Models/SiteSettings2PartRecord.cs | 9 -- .../Core/Settings/Models/SiteSettingsPart.cs | 54 ++++++----- .../Settings/Models/SiteSettingsPartRecord.cs | 31 ------- .../Core/Settings/Services/SiteService.cs | 12 +-- .../Core/Title/Models/TitlePart.cs | 7 +- .../Orchard.Autoroute/Models/AutoroutePart.cs | 13 ++- .../Orchard.Setup/Services/SetupService.cs | 8 +- .../Modules/Orchard.Setup/SetupMode.cs | 2 +- .../Services/TaxonomyService.cs | 12 +-- .../Controllers/AccountController.cs | 5 +- .../Controllers/AdminController.cs | 2 +- src/Orchard.Web/Modules/Upgrade/AdminMenu.cs | 15 +-- .../Upgrade/Controllers/InfosetController.cs | 91 +++++++++++++++++++ .../Modules/Upgrade/Upgrade.csproj | 3 +- .../Upgrade/Views/Infoset/Index.cshtml | 67 ++++++++++++++ src/Orchard/ContentManagement/ContentPart.cs | 29 ++++++ .../InfosetStorage/InfosetPart.cs | 42 ++++++--- src/Orchard/Settings/ISite.cs | 3 +- 32 files changed, 325 insertions(+), 220 deletions(-) delete mode 100644 src/Orchard.Web/Core/Settings/Models/SiteSettings2Part.cs delete mode 100644 src/Orchard.Web/Core/Settings/Models/SiteSettings2PartRecord.cs delete mode 100644 src/Orchard.Web/Core/Settings/Models/SiteSettingsPartRecord.cs create mode 100644 src/Orchard.Web/Modules/Upgrade/Controllers/InfosetController.cs create mode 100644 src/Orchard.Web/Modules/Upgrade/Views/Infoset/Index.cshtml diff --git a/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs b/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs index 94556a60b..c32a9987e 100644 --- a/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs +++ b/src/Orchard.Core.Tests/Feeds/Controllers/FeedControllerTests.cs @@ -8,6 +8,7 @@ using Autofac; using Moq; using NUnit.Framework; using Orchard.ContentManagement; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData.Builders; using Orchard.Core.Common.Models; @@ -150,6 +151,7 @@ namespace Orchard.Core.Tests.Feeds.Controllers { .Weld() .Weld() .Weld() + .Weld() .Build(); hello.As().Record = new CommonPartRecord(); hello.As().Record = new TitlePartRecord(); diff --git a/src/Orchard.Tests.Modules/DatabaseEnabledTestsBase.cs b/src/Orchard.Tests.Modules/DatabaseEnabledTestsBase.cs index 4ea73d694..7c73bfd37 100644 --- a/src/Orchard.Tests.Modules/DatabaseEnabledTestsBase.cs +++ b/src/Orchard.Tests.Modules/DatabaseEnabledTestsBase.cs @@ -7,6 +7,8 @@ using System.Linq; using Autofac; using NHibernate; using NUnit.Framework; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.ContentManagement.Handlers; using Orchard.Data; using Orchard.Environment.Configuration; using Orchard.Services; @@ -45,6 +47,7 @@ namespace Orchard.Tests.Modules { var builder = new ContainerBuilder(); //builder.RegisterModule(new ImplicitCollectionSupportModule()); + builder.RegisterType().As(); builder.RegisterInstance(new StubLocator(_session)).As(); builder.RegisterInstance(_clock).As(); builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); diff --git a/src/Orchard.Tests.Modules/Themes/Services/ThemeServiceTests.cs b/src/Orchard.Tests.Modules/Themes/Services/ThemeServiceTests.cs index 332d2329d..2181f49d2 100644 --- a/src/Orchard.Tests.Modules/Themes/Services/ThemeServiceTests.cs +++ b/src/Orchard.Tests.Modules/Themes/Services/ThemeServiceTests.cs @@ -15,7 +15,6 @@ using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.MetaData.Services; using Orchard.ContentManagement.Records; using Orchard.Core.Settings.Descriptor.Records; -using Orchard.Core.Settings.Handlers; using Orchard.Core.Settings.Metadata; using Orchard.Core.Settings.Models; using Orchard.Core.Settings.Services; diff --git a/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs b/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs index 043a60ed9..d13323b6e 100644 --- a/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs +++ b/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs @@ -102,8 +102,6 @@ namespace Orchard.Tests.Modules.Users.Controllers { protected override IEnumerable DatabaseTypes { get { return new[] { typeof(UserPartRecord), - typeof(SiteSettingsPartRecord), - typeof(SiteSettings2PartRecord), typeof(RegistrationSettingsPartRecord), typeof(ContentTypeRecord), typeof(ContentItemRecord), diff --git a/src/Orchard.Tests/DatabaseEnabledTestsBase.cs b/src/Orchard.Tests/DatabaseEnabledTestsBase.cs index 3884768ca..2a49f0f5a 100644 --- a/src/Orchard.Tests/DatabaseEnabledTestsBase.cs +++ b/src/Orchard.Tests/DatabaseEnabledTestsBase.cs @@ -6,6 +6,8 @@ using System.Linq; using Autofac; using NHibernate; using NUnit.Framework; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; +using Orchard.ContentManagement.Handlers; using Orchard.Data; using Orchard.Environment.Configuration; using Orchard.Services; @@ -41,6 +43,7 @@ namespace Orchard.Tests { var builder = new ContainerBuilder(); //builder.RegisterModule(new ImplicitCollectionSupportModule()); + builder.RegisterType().As(); builder.RegisterInstance(new StubLocator(_session)).As(); builder.RegisterInstance(_clock).As(); builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); diff --git a/src/Orchard.Web/Core/Common/Models/BodyPart.cs b/src/Orchard.Web/Core/Common/Models/BodyPart.cs index f644880cc..0e9901cda 100644 --- a/src/Orchard.Web/Core/Common/Models/BodyPart.cs +++ b/src/Orchard.Web/Core/Common/Models/BodyPart.cs @@ -1,12 +1,11 @@ using Orchard.ContentManagement; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; namespace Orchard.Core.Common.Models { public class BodyPart : ContentPart { public string Text { - get { return this.As().Get("Text"); } + get { return Get("Text"); } set { - this.As().Set("Text", value); + Set("Text", value); Record.Text = value; } } diff --git a/src/Orchard.Web/Core/Common/Models/CommonPart.cs b/src/Orchard.Web/Core/Common/Models/CommonPart.cs index 9256e6e1f..dc61bab6a 100644 --- a/src/Orchard.Web/Core/Common/Models/CommonPart.cs +++ b/src/Orchard.Web/Core/Common/Models/CommonPart.cs @@ -1,6 +1,5 @@ using System; using System.Xml; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.Core.Common.Utilities; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; @@ -27,85 +26,71 @@ namespace Orchard.Core.Common.Models { public DateTime? CreatedUtc { get { - var dateTime = this.As().Get("CreatedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = Get("CreatedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set("CreatedUtc", dateTime); + Set("CreatedUtc", dateTime); Record.CreatedUtc = value; } } public DateTime? PublishedUtc { get { - var dateTime = this.As().Get("PublishedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = Get("PublishedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set("PublishedUtc", dateTime); + Set("PublishedUtc", dateTime); Record.PublishedUtc = value; } } public DateTime? ModifiedUtc { get { - var dateTime = this.As().Get("ModifiedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = Get("ModifiedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set("ModifiedUtc", dateTime); + Set("ModifiedUtc", dateTime); Record.ModifiedUtc = value; } } - CommonPartVersionRecord PartVersionRecord { - get { - var versionPart = this.As>(); - return versionPart == null ? null : versionPart.Record; - } - } - public DateTime? VersionCreatedUtc { get { - var dateTime = this.As().Get>("CreatedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = this.As>().Get("CreatedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set>("CreatedUtc", dateTime); - if (PartVersionRecord != null) - PartVersionRecord.CreatedUtc = value; + this.As>().Set("CreatedUtc", dateTime); } } public DateTime? VersionPublishedUtc { get { - var dateTime = this.As().Get>("PublishedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = this.As>().Get("PublishedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set>("PublishedUtc", dateTime); - if (PartVersionRecord != null) - PartVersionRecord.PublishedUtc = value; + this.As>().Set("PublishedUtc", dateTime); } } public DateTime? VersionModifiedUtc { get { - var dateTime = this.As().Get>("ModifiedUtc"); - return dateTime == "" ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); + var dateTime = this.As>().Get("ModifiedUtc"); + return String.IsNullOrEmpty(dateTime) ? (DateTime?)null : XmlConvert.ToDateTime(dateTime, XmlDateTimeSerializationMode.Utc); } set { string dateTime = value.HasValue ? XmlConvert.ToString(value.Value, XmlDateTimeSerializationMode.Utc) : ""; - this.As().Set>("ModifiedUtc", dateTime); - if (PartVersionRecord != null) - PartVersionRecord.ModifiedUtc = value; + this.As>().Set("ModifiedUtc", dateTime); } } - } } diff --git a/src/Orchard.Web/Core/Common/Models/IdentityPart.cs b/src/Orchard.Web/Core/Common/Models/IdentityPart.cs index 58c44d626..ba96dd101 100644 --- a/src/Orchard.Web/Core/Common/Models/IdentityPart.cs +++ b/src/Orchard.Web/Core/Common/Models/IdentityPart.cs @@ -1,12 +1,11 @@ using Orchard.ContentManagement; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; namespace Orchard.Core.Common.Models { public class IdentityPart : ContentPart { public string Identifier { - get { return this.As().Get("Identifier"); } + get { return Get("Identifier"); } set { - this.As().Set("Identifier", value); + Set("Identifier", value); Record.Identifier = value; } } diff --git a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs index 3c25c6789..abb0f5eae 100644 --- a/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs +++ b/src/Orchard.Web/Core/Navigation/Models/MenuWidgetPart.cs @@ -1,47 +1,46 @@ using System.Globalization; using Orchard.ContentManagement; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.ContentManagement.Records; namespace Orchard.Core.Navigation.Models { public class MenuWidgetPart : ContentPart { public int StartLevel { - get { return int.Parse(this.As().Get("StartLevel") ?? "0", CultureInfo.InvariantCulture); } + get { return int.Parse(Get("StartLevel") ?? "0", CultureInfo.InvariantCulture); } set { - this.As().Set("StartLevel", value.ToString(CultureInfo.InvariantCulture)); + Set("StartLevel", value.ToString(CultureInfo.InvariantCulture)); Record.StartLevel = value; } } public int Levels { - get { return int.Parse(this.As().Get("Levels") ?? "0", CultureInfo.InvariantCulture); } + get { return int.Parse(Get("Levels") ?? "0", CultureInfo.InvariantCulture); } set { - this.As().Set("Levels", value.ToString(CultureInfo.InvariantCulture)); + Set("Levels", value.ToString(CultureInfo.InvariantCulture)); Record.Levels = value; } } public bool Breadcrumb { - get { return bool.Parse(this.As().Get("Breadcrumb") ?? "false"); } + get { return bool.Parse(Get("Breadcrumb") ?? "false"); } set { - this.As().Set("Breadcrumb", value.ToString()); + Set("Breadcrumb", value.ToString()); Record.Breadcrumb = value; } } public bool AddHomePage { - get { return bool.Parse(this.As().Get("AddHomePage") ?? "false"); } + get { return bool.Parse(Get("AddHomePage") ?? "false"); } set { - this.As().Set("AddHomePage", value.ToString()); + Set("AddHomePage", value.ToString()); Record.AddHomePage = value; } } public bool AddCurrentPage { - get { return bool.Parse(this.As().Get("AddCurrentPage") ?? "false"); } + get { return bool.Parse(Get("AddCurrentPage") ?? "false"); } set { - this.As().Set("AddCurrentPage", value.ToString()); + Set("AddCurrentPage", value.ToString()); Record.AddCurrentPage = value; } } diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs index c55801e6f..187f12246 100644 --- a/src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs @@ -39,7 +39,7 @@ namespace Orchard.Core.Navigation.Services { } public IContent GetMenu(int menuId) { - return _contentManager.Get(menuId, VersionOptions.Published, new QueryHints().ExpandRecords()); + return _contentManager.Get(menuId, VersionOptions.Published); } public MenuPart Get(int menuPartId) { diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index d1f4a51e1..24c512de2 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -221,8 +221,6 @@ - - @@ -235,7 +233,6 @@ - @@ -375,6 +372,7 @@ + diff --git a/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs b/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs index 52707ff5e..8a7bcf2b3 100644 --- a/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs +++ b/src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs @@ -1,16 +1,12 @@ using JetBrains.Annotations; using Orchard.Core.Settings.Models; -using Orchard.Data; using Orchard.ContentManagement.Handlers; namespace Orchard.Core.Settings.Handlers { [UsedImplicitly] public class SiteSettingsPartHandler : ContentHandler { - public SiteSettingsPartHandler(IRepository repository, IRepository repository2) { + public SiteSettingsPartHandler() { Filters.Add(new ActivatingFilter("Site")); - Filters.Add(new ActivatingFilter("Site")); - Filters.Add(StorageFilter.For(repository)); - Filters.Add(StorageFilter.For(repository2)); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Migrations.cs b/src/Orchard.Web/Core/Settings/Migrations.cs index 7d451920d..408311f67 100644 --- a/src/Orchard.Web/Core/Settings/Migrations.cs +++ b/src/Orchard.Web/Core/Settings/Migrations.cs @@ -81,27 +81,10 @@ namespace Orchard.Core.Settings { .Column("Unused") ); - SchemaBuilder.CreateTable("SiteSettingsPartRecord", - table => table - .ContentPartRecord() - .Column("SiteSalt") - .Column("SiteName") - .Column("SuperUser") - .Column("PageTitleSeparator") - .Column("HomePage") - .Column("SiteCulture") - .Column("ResourceDebugMode", c => c.WithDefault("FromAppSetting")) - .Column("PageSize") - .Column("SiteTimeZone") - ); + // declare the Site content type to let users alter it + ContentDefinitionManager.AlterTypeDefinition("Site", cfg => { }); - SchemaBuilder.CreateTable("SiteSettings2PartRecord", - table => table - .ContentPartRecord() - .Column("BaseUrl", c => c.Unlimited()) - ); - - return 3; + return 4; } public int UpdateFrom1() { diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettings2Part.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettings2Part.cs deleted file mode 100644 index 6b7983964..000000000 --- a/src/Orchard.Web/Core/Settings/Models/SiteSettings2Part.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Orchard.ContentManagement; -using Orchard.Data.Conventions; - -namespace Orchard.Core.Settings.Models { - public sealed class SiteSettings2Part : ContentPart { - [StringLengthMax] - public string BaseUrl { - get { return Record.BaseUrl; } - set { Record.BaseUrl = value; } - } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettings2PartRecord.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettings2PartRecord.cs deleted file mode 100644 index 5458474f9..000000000 --- a/src/Orchard.Web/Core/Settings/Models/SiteSettings2PartRecord.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Orchard.ContentManagement.Records; -using Orchard.Data.Conventions; - -namespace Orchard.Core.Settings.Models { - public class SiteSettings2PartRecord : ContentPartRecord { - [StringLengthMax] - public virtual string BaseUrl { get; set; } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettingsPart.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettingsPart.cs index 071f81bce..500a5be16 100644 --- a/src/Orchard.Web/Core/Settings/Models/SiteSettingsPart.cs +++ b/src/Orchard.Web/Core/Settings/Models/SiteSettingsPart.cs @@ -1,64 +1,62 @@ using System; -using System.ComponentModel.DataAnnotations; +using System.Globalization; using Orchard.ContentManagement; -using Orchard.Data.Conventions; using Orchard.Settings; namespace Orchard.Core.Settings.Models { - public sealed class SiteSettingsPart : ContentPart, ISite { + public sealed class SiteSettingsPart : ContentPart, ISite { + public const int DefaultPageSize = 10; public string PageTitleSeparator { - get { return Record.PageTitleSeparator; } - set { Record.PageTitleSeparator = value; } + get { return Get("PageTitleSeparator"); } + set { Set("PageTitleSeparator", value); } } - public string SiteName { - get { return Record.SiteName; } - set { Record.SiteName = value; } + get { return Get("SiteName"); } + set { Set("SiteName", value); } } public string SiteSalt { - get { return Record.SiteSalt; } + get { return Get("SiteSalt"); } + set { Set("SiteSalt", value); } } public string SuperUser { - get { return Record.SuperUser; } - set { Record.SuperUser = value; } + get { return Get("SuperUser"); } + set { Set("SuperUser", value); } } public string HomePage { - get { return Record.HomePage; } - set { Record.HomePage = value; } + get { return Get("HomePage"); } + set { Set("HomePage", value); } } public string SiteCulture { - get { return Record.SiteCulture; } - set { Record.SiteCulture = value; } + get { return Get("SiteCulture"); } + set { Set("SiteCulture", value); } } public ResourceDebugMode ResourceDebugMode { - get { return Record.ResourceDebugMode; } - set { Record.ResourceDebugMode = value; } + get { + var value = Get("ResourceDebugMode"); + return String.IsNullOrEmpty(value) ? ResourceDebugMode.Disabled : (ResourceDebugMode)Enum.Parse(typeof(ResourceDebugMode), value); + } + set { Set("ResourceDebugMode", value.ToString()); } } public int PageSize { - get { return Record.PageSize; } - set { Record.PageSize = value; } + get { return int.Parse(Get("PageSize") ?? "0", CultureInfo.InvariantCulture); } + set { Set("PageSize", value.ToString(CultureInfo.InvariantCulture)); } } public string SiteTimeZone { - get { return Record.SiteTimeZone; } - set { Record.SiteTimeZone = value; } + get { return Get("SiteTimeZone"); } + set { Set("SiteTimeZone", value); } } - [StringLengthMax] public string BaseUrl { - get { - return this.As().BaseUrl; - } - set { - this.As().BaseUrl = value; - } + get { return Get("BaseUrl"); } + set { Set("BaseUrl", value); } } } } diff --git a/src/Orchard.Web/Core/Settings/Models/SiteSettingsPartRecord.cs b/src/Orchard.Web/Core/Settings/Models/SiteSettingsPartRecord.cs deleted file mode 100644 index 6d85341be..000000000 --- a/src/Orchard.Web/Core/Settings/Models/SiteSettingsPartRecord.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Orchard.ContentManagement.Records; -using Orchard.Settings; - -namespace Orchard.Core.Settings.Models { - public class SiteSettingsPartRecord : ContentPartRecord { - public const int DefaultPageSize = 10; - - public SiteSettingsPartRecord() { - PageSize = DefaultPageSize; - } - - public virtual string SiteSalt { get; set; } - - public virtual string SiteName { get; set; } - - public virtual string SuperUser { get; set; } - - public virtual string PageTitleSeparator { get; set; } - - public virtual string HomePage { get; set; } - - public virtual string SiteCulture { get; set; } - - public virtual ResourceDebugMode ResourceDebugMode { get; set; } - - public virtual int PageSize { get; set; } - - public virtual string SiteTimeZone { get; set; } - } -} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Settings/Services/SiteService.cs b/src/Orchard.Web/Core/Settings/Services/SiteService.cs index 603994413..79b4667da 100644 --- a/src/Orchard.Web/Core/Settings/Services/SiteService.cs +++ b/src/Orchard.Web/Core/Settings/Services/SiteService.cs @@ -3,7 +3,6 @@ using System.Linq; using JetBrains.Annotations; using Orchard.Caching; using Orchard.Core.Settings.Models; -using Orchard.Data; using Orchard.Logging; using Orchard.ContentManagement; using Orchard.Settings; @@ -15,7 +14,6 @@ namespace Orchard.Core.Settings.Services { private readonly ICacheManager _cacheManager; public SiteService( - IRepository siteSettingsRepository, IContentManager contentManager, ICacheManager cacheManager) { _contentManager = contentManager; @@ -33,17 +31,17 @@ namespace Orchard.Core.Settings.Services { if (site == null) { site = _contentManager.Create("Site", item => { - item.Record.SiteSalt = Guid.NewGuid().ToString("N"); - item.Record.SiteName = "My Orchard Project Application"; - item.Record.PageTitleSeparator = " - "; - item.Record.SiteTimeZone = TimeZoneInfo.Local.Id; + item.SiteSalt = Guid.NewGuid().ToString("N"); + item.SiteName = "My Orchard Project Application"; + item.PageTitleSeparator = " - "; + item.SiteTimeZone = TimeZoneInfo.Local.Id; }).ContentItem; } return site.Id; }); - return _contentManager.Get(siteId, VersionOptions.Published, new QueryHints().ExpandRecords()); + return _contentManager.Get(siteId, VersionOptions.Published); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Title/Models/TitlePart.cs b/src/Orchard.Web/Core/Title/Models/TitlePart.cs index cd820dc01..7d44a8c29 100644 --- a/src/Orchard.Web/Core/Title/Models/TitlePart.cs +++ b/src/Orchard.Web/Core/Title/Models/TitlePart.cs @@ -1,15 +1,16 @@ using System.ComponentModel.DataAnnotations; using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; namespace Orchard.Core.Title.Models { public class TitlePart : ContentPart, ITitleAspect { [Required] public string Title { - get { return this.As().Get("Title"); } + get { + return Get("Title"); + } set { - this.As().Set("Title", value); + Set("Title", value); Record.Title = value; } } diff --git a/src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePart.cs b/src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePart.cs index 4c2610e6e..ac9c8ab9f 100644 --- a/src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePart.cs +++ b/src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePart.cs @@ -1,30 +1,29 @@ using Orchard.ContentManagement; using Orchard.ContentManagement.Aspects; -using Orchard.ContentManagement.FieldStorage.InfosetStorage; namespace Orchard.Autoroute.Models { public class AutoroutePart : ContentPart, IAliasAspect { public string CustomPattern { - get { return this.As().Get("CustomPattern"); } + get { return Get("CustomPattern"); } set { - this.As().Set("CustomPattern", value); + Set("CustomPattern", value); Record.CustomPattern = value; } } public bool UseCustomPattern { - get { return bool.Parse(this.As().Get("UseCustomPattern")); } + get { return bool.Parse(Get("UseCustomPattern")); } set { - this.As().Set("UseCustomPattern", value.ToString()); + Set("UseCustomPattern", value.ToString()); Record.UseCustomPattern = value; } } public string DisplayAlias { - get { return this.As().Get("DisplayAlias"); } + get { return Get("DisplayAlias"); } set { - this.As().Set("DisplayAlias", value); + Set("DisplayAlias", value); Record.DisplayAlias = value; } } diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 69b2508ef..4d76f2c77 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -186,10 +186,10 @@ namespace Orchard.Setup.Services { // set site name and settings var siteService = environment.Resolve(); var siteSettings = siteService.GetSiteSettings().As(); - siteSettings.Record.SiteSalt = Guid.NewGuid().ToString("N"); - siteSettings.Record.SiteName = context.SiteName; - siteSettings.Record.SuperUser = context.AdminUsername; - siteSettings.Record.SiteCulture = "en-US"; + siteSettings.SiteSalt = Guid.NewGuid().ToString("N"); + siteSettings.SiteName = context.SiteName; + siteSettings.SuperUser = context.AdminUsername; + siteSettings.SiteCulture = "en-US"; // add default culture var cultureManager = environment.Resolve(); diff --git a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs index bec781d9d..d5e581d96 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs @@ -182,7 +182,7 @@ namespace Orchard.Setup { } public int PageSize { - get { return SiteSettingsPartRecord.DefaultPageSize; } + get { return SiteSettingsPart.DefaultPageSize; } set { throw new NotImplementedException(); } } diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Services/TaxonomyService.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Services/TaxonomyService.cs index d65a7c80b..fc1f682a7 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Services/TaxonomyService.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Services/TaxonomyService.cs @@ -62,7 +62,6 @@ namespace Orchard.Taxonomies.Services { .Query() .Join() .Where(r => r.Title == name) - .WithQueryHints(new QueryHints().ExpandRecords()) .List() .FirstOrDefault(); } @@ -132,7 +131,6 @@ namespace Orchard.Taxonomies.Services { public IEnumerable GetTerms(int taxonomyId) { var result = _contentManager.Query() .Where(x => x.TaxonomyId == taxonomyId) - .WithQueryHints(new QueryHints().ExpandRecords()) .List(); return TermPart.Sort(result); @@ -141,7 +139,6 @@ namespace Orchard.Taxonomies.Services { public TermPart GetTermByPath(string path) { return _contentManager.Query() .Join() - .WithQueryHints(new QueryHints().ExpandRecords()) .Where(rr => rr.DisplayAlias == path) .List() .FirstOrDefault(); @@ -150,7 +147,6 @@ namespace Orchard.Taxonomies.Services { public IEnumerable GetAllTerms() { var result = _contentManager .Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .List(); return TermPart.Sort(result); } @@ -158,7 +154,6 @@ namespace Orchard.Taxonomies.Services { public TermPart GetTerm(int id) { return _contentManager .Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .Where(x => x.Id == id).List().FirstOrDefault(); } @@ -171,7 +166,6 @@ namespace Orchard.Taxonomies.Services { public TermPart GetTermByName(int taxonomyId, string name) { return _contentManager .Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .Where(t => t.TaxonomyId == taxonomyId) .Join() .Where(r => r.Title == name) @@ -236,8 +230,7 @@ namespace Orchard.Taxonomies.Services { var rootPath = term.FullPath + "/"; var query = _contentManager - .Query() - .WithQueryHints(new QueryHints().ExpandRecords()); + .Query(); if (String.IsNullOrWhiteSpace(fieldName)) { query = query.Where( @@ -273,7 +266,6 @@ namespace Orchard.Taxonomies.Services { var rootPath = term.FullPath + "/"; var result = _contentManager.Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .Where(x => x.Path.StartsWith(rootPath)) .List(); @@ -291,7 +283,6 @@ namespace Orchard.Taxonomies.Services { public IEnumerable GetSlugs() { return _contentManager .Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .List() .Select(t => t.Slug); } @@ -299,7 +290,6 @@ namespace Orchard.Taxonomies.Services { public IEnumerable GetTermPaths() { return _contentManager .Query() - .WithQueryHints(new QueryHints().ExpandRecords()) .List() .Select(t => t.Slug); } diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index df4ff22fa..b96fbb7a5 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -1,7 +1,6 @@ using System; using System.Text.RegularExpressions; using System.Diagnostics.CodeAnalysis; -using Orchard.Core.Settings.Models; using Orchard.Localization; using System.Web.Mvc; using System.Web.Security; @@ -138,7 +137,7 @@ namespace Orchard.Users.Controllers { if (user != null) { if ( user.As().EmailStatus == UserStatus.Pending ) { - var siteUrl = _orchardServices.WorkContext.CurrentSite.As().BaseUrl; + var siteUrl = _orchardServices.WorkContext.CurrentSite.BaseUrl; if(String.IsNullOrWhiteSpace(siteUrl)) { siteUrl = HttpContext.Request.ToRootUrlString(); } @@ -190,7 +189,7 @@ namespace Orchard.Users.Controllers { return View(); } - var siteUrl = _orchardServices.WorkContext.CurrentSite.As().BaseUrl; + var siteUrl = _orchardServices.WorkContext.CurrentSite.BaseUrl; if (String.IsNullOrWhiteSpace(siteUrl)) { siteUrl = HttpContext.Request.ToRootUrlString(); } diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs index 17151ab84..84dd0587c 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs @@ -296,7 +296,7 @@ namespace Orchard.Users.Controllers { var user = Services.ContentManager.Get(id); if ( user != null ) { - var siteUrl = Services.WorkContext.CurrentSite.As().BaseUrl; + var siteUrl = Services.WorkContext.CurrentSite.BaseUrl; if (String.IsNullOrWhiteSpace(siteUrl)) { siteUrl = HttpContext.Request.ToRootUrlString(); } diff --git a/src/Orchard.Web/Modules/Upgrade/AdminMenu.cs b/src/Orchard.Web/Modules/Upgrade/AdminMenu.cs index f3e0f30f9..42b01722c 100644 --- a/src/Orchard.Web/Modules/Upgrade/AdminMenu.cs +++ b/src/Orchard.Web/Modules/Upgrade/AdminMenu.cs @@ -13,13 +13,14 @@ namespace Upgrade { public void GetNavigation(NavigationBuilder builder) { builder .AddImageSet("upgrade") - .Add(T("Upgrade to 1.7"), "0", menu => menu.Action("Index", "Route", new { area = "Upgrade" }) - .Add(T("Media (1.7)"), "1", item => item.Action("Index", "Media", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) - .Add(T("Taxonomies (1.7)"), "2", item => item.Action("Index", "Taxonomy", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) - .Add(T("Content Picker (1.7)"), "2", item => item.Action("Index", "ContentPicker", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) - .Add(T("Fields (1.5)"), "3", item => item.Action("Index", "Field", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) - .Add(T("Menu (1.5)"), "4", item => item.Action("Index", "Menu", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) - .Add(T("Routes (1.4)"), "5", item => item.Action("Index", "Route", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Upgrade to 1.8"), "0", menu => menu.Action("Index", "Route", new { area = "Upgrade" }) + .Add(T("Infoset (1.8)"), "1", item => item.Action("Index", "Infoset", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Media (1.7)"), "2", item => item.Action("Index", "Media", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Taxonomies (1.7)"), "3", item => item.Action("Index", "Taxonomy", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Content Picker (1.7)"), "4", item => item.Action("Index", "ContentPicker", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Fields (1.5)"), "5", item => item.Action("Index", "Field", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Menu (1.5)"), "6", item => item.Action("Index", "Menu", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) + .Add(T("Routes (1.4)"), "7", item => item.Action("Index", "Route", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner)) ); } } diff --git a/src/Orchard.Web/Modules/Upgrade/Controllers/InfosetController.cs b/src/Orchard.Web/Modules/Upgrade/Controllers/InfosetController.cs new file mode 100644 index 000000000..fab15be9c --- /dev/null +++ b/src/Orchard.Web/Modules/Upgrade/Controllers/InfosetController.cs @@ -0,0 +1,91 @@ +using System.Linq; +using System.Security.Authentication; +using System.Web.Mvc; +using Orchard; +using Orchard.ContentManagement; +using Orchard.Core.Common.Models; +using Orchard.Core.Settings.Models; +using Orchard.Localization; +using Orchard.Logging; +using Orchard.Security; +using Orchard.Settings; +using Orchard.UI.Admin; +using Orchard.UI.Notify; +using Upgrade.Services; + +namespace Upgrade.Controllers { + [Admin] + public class InfosetController : Controller { + private readonly IOrchardServices _orchardServices; + private readonly IUpgradeService _upgradeService; + + private const int BATCH = 50; + + public InfosetController( + IOrchardServices orchardServices, + IUpgradeService upgradeService) { + _orchardServices = orchardServices; + _upgradeService = upgradeService; + + Logger = NullLogger.Instance; + } + + public Localizer T { get; set; } + public ILogger Logger { get; set; } + + public ActionResult Index() { + return View(); + } + + [HttpPost, ActionName("Index")] + public ActionResult IndexPost() { + if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner)) + throw new AuthenticationException(""); + + var site = _orchardServices.WorkContext.CurrentSite.As(); + + _upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Core_SiteSettingsPartRecord"), + (reader, connection) => { + site.HomePage = (string)reader["HomePage"]; + site.PageSize = (int)reader["PageSize"]; + site.PageTitleSeparator = (string)reader["PageTitleSeparator"]; + site.ResourceDebugMode = (ResourceDebugMode)reader["ResourceDebugMode"]; + site.SiteCulture = (string)reader["SiteCulture"]; + site.SiteName = (string)reader["SiteName"]; + site.SiteSalt = (string)reader["SiteSalt"]; + site.SiteTimeZone = (string)reader["SiteTimeZone"]; + site.SuperUser = (string)reader["SuperUser"]; + }); + + _upgradeService.ExecuteReader("SELECT * FROM " + _upgradeService.GetPrefixedTableName("Orchard_Core_SiteSettings2PartRecord"), + (reader, connection) => { + site.BaseUrl = (string)reader["BaseUrl"]; + }); + + _upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Core_SiteSettingsPartRecord"), null); + _upgradeService.ExecuteReader("DROP TABLE " + _upgradeService.GetPrefixedTableName("Orchard_Core_SiteSettings2PartRecord"), null); + + _orchardServices.Notifier.Information(T("Site Settings migrated successfully")); + + return View(); + } + + [HttpPost] + public JsonResult MigrateBody(int id) { + if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner)) + throw new AuthenticationException(""); + + var contentItems = _orchardServices.ContentManager + .Query() + .Where(x => x.Id > id) + .OrderBy(x => x.Id) + .Slice(0, BATCH).ToList(); + + foreach (var contentItem in contentItems) { + contentItem.Text = contentItem.Text; + } + + return new JsonResult { Data = contentItems.Last().Id }; + } + } +} diff --git a/src/Orchard.Web/Modules/Upgrade/Upgrade.csproj b/src/Orchard.Web/Modules/Upgrade/Upgrade.csproj index c84e8208c..02b31fa72 100644 --- a/src/Orchard.Web/Modules/Upgrade/Upgrade.csproj +++ b/src/Orchard.Web/Modules/Upgrade/Upgrade.csproj @@ -74,6 +74,7 @@ + @@ -134,7 +135,7 @@ - + 10.0 diff --git a/src/Orchard.Web/Modules/Upgrade/Views/Infoset/Index.cshtml b/src/Orchard.Web/Modules/Upgrade/Views/Infoset/Index.cshtml new file mode 100644 index 000000000..bff956b5b --- /dev/null +++ b/src/Orchard.Web/Modules/Upgrade/Views/Infoset/Index.cshtml @@ -0,0 +1,67 @@ +@{ + Script.Require("jQuery"); + Layout.Title = T("Migrate Infosets").ToString(); +} + +@using (Html.BeginFormAntiForgeryPost(Url.Action("Index", "Infoset"))) { +
+ @T("Migrating Site Settings:") + @T("This migration step will migrate your Site Settings to Infosets and delete the deprecated records.") +
+
+ +
+} + +
+ @T("Migrating Body Parts:") + @T("This migration step will copy all Body Parts to Infosets.") +
+
+ + +
+ +@using (Script.Foot()) { + +} \ No newline at end of file diff --git a/src/Orchard/ContentManagement/ContentPart.cs b/src/Orchard/ContentManagement/ContentPart.cs index e2ddebd33..335f1b4ca 100644 --- a/src/Orchard/ContentManagement/ContentPart.cs +++ b/src/Orchard/ContentManagement/ContentPart.cs @@ -3,7 +3,10 @@ using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Web.Mvc; +using Autofac; +using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.Records; using Orchard.ContentManagement.Utilities; using Orchard.UI; @@ -76,9 +79,35 @@ namespace Orchard.ContentManagement { return true; } + public virtual string Get(string fieldName) { + return this.As().Get(GetType().Name, fieldName, null, false); + } + + public string GetVersioned(string fieldName) { + return this.As().Get(GetType().Name, fieldName, null, true); + } + public virtual void Set(string fieldName, string value) { + this.As().Set(GetType().Name, fieldName, null, value, false); + } + public void SetVersionned(string fieldName, string value) { + this.As().Set(GetType().Name, fieldName, null, value, true); + } } public class ContentPart : ContentPart { + + static protected bool IsVersionableRecord { get; private set;} + static ContentPart() { + IsVersionableRecord = typeof (TRecord).IsAssignableTo(); + } + + public override string Get(string fieldName) { + return this.As().Get(GetType().Name, fieldName, null, IsVersionableRecord); + } + public override void Set(string fieldName, string value) { + this.As().Set(GetType().Name, fieldName, null, value, IsVersionableRecord); + } + public readonly LazyField _record = new LazyField(); public TRecord Record { get { return _record.Value; } set { _record.Value = value; } } } diff --git a/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetPart.cs b/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetPart.cs index 01be69ba3..9240454e4 100644 --- a/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetPart.cs +++ b/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetPart.cs @@ -1,5 +1,7 @@ using System.Xml; using System.Xml.Linq; +using Autofac; +using Orchard.ContentManagement.Records; namespace Orchard.ContentManagement.FieldStorage.InfosetStorage { public class InfosetPart : ContentPart { @@ -17,15 +19,22 @@ namespace Orchard.ContentManagement.FieldStorage.InfosetStorage { } public string Get(string fieldName, string valueName) { - return Get(typeof(TPart).Name, fieldName, valueName); + return Get(typeof(TPart).Name, fieldName, valueName, typeof(TPart).IsAssignableTo()); } public string Get(string partName, string fieldName) { - return Get(partName, fieldName, null); + return Get(partName, fieldName, null, false); } - public string Get(string partName, string fieldName, string valueName) { - var partElement = Infoset.Element.Element(XmlConvert.EncodeName(partName)); + public string GetVersioned(string partName, string fieldName) { + return Get(partName, fieldName, null, true); + } + + public string Get(string partName, string fieldName, string valueName, bool versionable = false) { + + var element = versionable ? VersionInfoset.Element : Infoset.Element; + + var partElement = element.Element(XmlConvert.EncodeName(partName)); if (partElement == null) { return null; } @@ -48,24 +57,35 @@ namespace Orchard.ContentManagement.FieldStorage.InfosetStorage { } public void Set(string fieldName, string value) { - Set(typeof(TPart).Name, fieldName, null, value); + Set(typeof(TPart).Name, fieldName, null, value, typeof(TPart).IsAssignableTo()); } public void Set(string partName, string fieldName, string value) { - Set(partName, fieldName, null, value); + Set(partName, fieldName, null, value, false); } - public void Set(string partName, string fieldName, string valueName, string value) { - var partElement = Infoset.Element.Element(XmlConvert.EncodeName(partName)); + public void SetVersioned(string partName, string fieldName, string value) { + Set(partName, fieldName, null, value, true); + } + + public void Set(string partName, string fieldName, string valueName, string value, bool versionable = false) { + + var element = versionable ? VersionInfoset.Element : Infoset.Element; + + var encodedPartName = XmlConvert.EncodeName(partName); + var partElement = element.Element(encodedPartName); if (partElement == null) { - partElement = new XElement(XmlConvert.EncodeName(partName)); + partElement = new XElement(encodedPartName); Infoset.Element.Add(partElement); } - var fieldElement = partElement.Element(XmlConvert.EncodeName(fieldName)); + + var encodedFieldName = XmlConvert.EncodeName(fieldName); + var fieldElement = partElement.Element(encodedFieldName); if (fieldElement == null) { - fieldElement = new XElement(XmlConvert.EncodeName(fieldName)); + fieldElement = new XElement(encodedFieldName); partElement.Add(fieldElement); } + if (string.IsNullOrEmpty(valueName)) { fieldElement.Value = value ?? ""; } diff --git a/src/Orchard/Settings/ISite.cs b/src/Orchard/Settings/ISite.cs index 666a58f46..0ed3dfe68 100644 --- a/src/Orchard/Settings/ISite.cs +++ b/src/Orchard/Settings/ISite.cs @@ -1,5 +1,4 @@ -using System; -using Orchard.ContentManagement; +using Orchard.ContentManagement; namespace Orchard.Settings { ///