From 5fbb36e13a78e7c7e7e6105d6a18b77dd457aaac Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 16 Nov 2011 10:46:43 -0800 Subject: [PATCH] #18009: Fixing versioned fields storage Work Item: 18009 --HG-- branch : 1.x --- .hgsubstate | 2 +- .../InfosetFieldStorageProviderTests.cs | 6 ++--- .../FieldStorage/IFieldStorageEvents.cs | 22 ++++++++++--------- .../InfosetStorage/InfosetStorageProvider.cs | 4 ++-- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.hgsubstate b/.hgsubstate index bb8b9c489..1fd83459a 100644 --- a/.hgsubstate +++ b/.hgsubstate @@ -1,5 +1,5 @@ 1e6a2d32657e96db406ad54c318e09c1fe2ed889 src/Orchard.Web/Modules/Orchard.Forms -4d999d9b380e32e74f5ef1339bf883c18586f395 src/Orchard.Web/Modules/Orchard.Projections +465ac29c0285497155bf93c0322ddfc5577ac322 src/Orchard.Web/Modules/Orchard.Projections 15cec8c8d8791c108e1f63f40b2357c6bc6605e7 src/Orchard.Web/Modules/Orchard.Rules 65057c6a5cd71f7994ba9bcbeece50dbb737620e src/Orchard.Web/Modules/Orchard.TaskLease ebdcbf2c57f9f888dcdc2b577a1e9c6e8f9c1957 src/Orchard.Web/Modules/Orchard.Tokens diff --git a/src/Orchard.Tests/ContentManagement/Drivers/FieldStorage/InfosetFieldStorageProviderTests.cs b/src/Orchard.Tests/ContentManagement/Drivers/FieldStorage/InfosetFieldStorageProviderTests.cs index 0b9a937f2..f6b95d617 100644 --- a/src/Orchard.Tests/ContentManagement/Drivers/FieldStorage/InfosetFieldStorageProviderTests.cs +++ b/src/Orchard.Tests/ContentManagement/Drivers/FieldStorage/InfosetFieldStorageProviderTests.cs @@ -100,7 +100,7 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage { storage.Set(null, "one"); storage.Set("alpha", "two"); - Assert.That(part.ContentItem.Record.Data, Is.EqualTo("one")); + Assert.That(part.ContentItem.VersionRecord.Data, Is.EqualTo("one")); } [Test] @@ -111,8 +111,8 @@ namespace Orchard.Tests.ContentManagement.Drivers.FieldStorage { storage.Set(null, "one"); storage.Set("alpha", "two"); - Assert.That(part.ContentItem.Record.Data, Is.EqualTo("one")); - part.ContentItem.Record.Data = "three"; + Assert.That(part.ContentItem.VersionRecord.Data, Is.EqualTo("one")); + part.ContentItem.VersionRecord.Data = "three"; storage.Set(null, "three"); storage.Set("alpha", "four"); diff --git a/src/Orchard/ContentManagement/FieldStorage/IFieldStorageEvents.cs b/src/Orchard/ContentManagement/FieldStorage/IFieldStorageEvents.cs index b7b5c503f..549415482 100644 --- a/src/Orchard/ContentManagement/FieldStorage/IFieldStorageEvents.cs +++ b/src/Orchard/ContentManagement/FieldStorage/IFieldStorageEvents.cs @@ -41,17 +41,19 @@ namespace Orchard.ContentManagement.FieldStorage { public void Set(string name, T value) { _concreteStorage.Set(name, value); - var context = new FieldStorageEventContext { - FieldName = _contentPartFieldDefinition.Name, - PartName = _contentPart.PartDefinition.Name, - Value = value, - ValueName = name, - ValueType = typeof(T), - Content = _contentPart - }; + if (_contentPart.ContentItem.IsPublished()) { + var context = new FieldStorageEventContext { + FieldName = _contentPartFieldDefinition.Name, + PartName = _contentPart.PartDefinition.Name, + Value = value, + ValueName = name, + ValueType = typeof (T), + Content = _contentPart + }; - foreach (var fieldEvent in _events) { - fieldEvent.SetCalled(context); + foreach (var fieldEvent in _events) { + fieldEvent.SetCalled(context); + } } } } diff --git a/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetStorageProvider.cs b/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetStorageProvider.cs index cb525ba95..ccd197c06 100644 --- a/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetStorageProvider.cs +++ b/src/Orchard/ContentManagement/FieldStorage/InfosetStorage/InfosetStorageProvider.cs @@ -14,8 +14,8 @@ namespace Orchard.ContentManagement.FieldStorage.InfosetStorage { var infosetPart = contentPart.As(); return new SimpleFieldStorage( - (name, valueType) => Get(infosetPart.Infoset.Element, partName, fieldName, name), - (name, valueType, value) => Set(infosetPart.Infoset.Element, partName, fieldName, name, value)); + (name, valueType) => Get(infosetPart.ContentItem.IsPublished() ? infosetPart.Infoset.Element : infosetPart.VersionInfoset.Element, partName, fieldName, name), + (name, valueType, value) => Set(infosetPart.ContentItem.IsPublished() ? infosetPart.Infoset.Element : infosetPart.VersionInfoset.Element, partName, fieldName, name, value)); } private static string Get(XElement element, string partName, string fieldName, string valueName) {