From 9d6937c792ab43d62c07cd7b0c4a0a60130eebba Mon Sep 17 00:00:00 2001 From: adeveloper Date: Mon, 29 Jun 2015 17:07:14 -0400 Subject: [PATCH 1/3] DefaultContentManager.cs The new version should always be contentItemRecord.Versions.Max(x => x.Number) + 1; not latestVersion.Number + 1; I have a scenario where user can delete the draft content. In this scenario, I set the published version to have Latest=true and the draft version to have Latest=false. Now if I have to create again a new draft out of the published content, I end up having two versions of the same content items with the same version number. --- src/Orchard/ContentManagement/DefaultContentManager.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index a94278d7a..31603d9da 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -481,11 +481,13 @@ namespace Orchard.ContentManagement { if (latestVersion != null) { latestVersion.Latest = false; - buildingItemVersionRecord.Number = latestVersion.Number + 1; - } - else { - buildingItemVersionRecord.Number = contentItemRecord.Versions.Max(x => x.Number) + 1; + //buildingItemVersionRecord.Number = latestVersion.Number + 1; } + //else { + // buildingItemVersionRecord.Number = contentItemRecord.Versions.Max(x => x.Number) + 1; + //} + ////The new version should always be the next highest available number. + buildingItemVersionRecord.Number = contentItemRecord.Versions.Max(x => x.Number) + 1; contentItemRecord.Versions.Add(buildingItemVersionRecord); _contentItemVersionRepository.Create(buildingItemVersionRecord); From 379ae61e341629c88c482710bda5c66f10d26b06 Mon Sep 17 00:00:00 2001 From: adeveloper Date: Wed, 1 Jul 2015 11:38:49 -0400 Subject: [PATCH 2/3] Code clean up Removed the commented lines in method BuildNewVersion. --- src/Orchard/ContentManagement/DefaultContentManager.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index 31603d9da..3eec21bd9 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -481,11 +481,7 @@ namespace Orchard.ContentManagement { if (latestVersion != null) { latestVersion.Latest = false; - //buildingItemVersionRecord.Number = latestVersion.Number + 1; } - //else { - // buildingItemVersionRecord.Number = contentItemRecord.Versions.Max(x => x.Number) + 1; - //} ////The new version should always be the next highest available number. buildingItemVersionRecord.Number = contentItemRecord.Versions.Max(x => x.Number) + 1; From aaef6d88106cdac215fc07aa9d8fc7dcdc723145 Mon Sep 17 00:00:00 2001 From: adeveloper Date: Wed, 1 Jul 2015 14:31:31 -0400 Subject: [PATCH 3/3] Adding a test case for DraftRequired version option building new version of the content --- .../DefaultContentManagerTests.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs index c20aaf66d..bacf5baa2 100644 --- a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs +++ b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs @@ -471,6 +471,46 @@ namespace Orchard.Tests.ContentManagement { Assert.That(gamma2.Record.Versions, Has.Count.EqualTo(2)); } + [Test] + public void DraftRequiredShouldAlwaysBuildNewVersionFromPublishedIfDraftNotFound() + { + Trace.WriteLine("gamma1"); + var gamma1 = _manager.Create(DefaultGammaName, VersionOptions.Published); + Trace.WriteLine("flush"); + _session.Flush(); + _session.Clear(); + + Trace.WriteLine("gammaDraft1"); + var gammaDraft1 = _manager.Get(gamma1.Id, VersionOptions.DraftRequired); + Assert.That(gammaDraft1.Version, Is.EqualTo(2)); + Trace.WriteLine("flush"); + _session.Flush(); + _session.Clear(); + + Trace.WriteLine("Delete gammaDraft1"); + var gammaDraft2 = _manager.Get(gammaDraft1.Id, VersionOptions.Draft); + gammaDraft2.VersionRecord.Latest = false; + + Trace.WriteLine("Restore gamma1 as Latest"); + var gamma2 = _manager.Get(gamma1.Id, VersionOptions.Published); + var publishedVersion = gamma2.Record.Versions.SingleOrDefault(x => x.Published); + if (publishedVersion != null) + { + publishedVersion.Latest = true; + } + Trace.WriteLine("flush"); + _session.Flush(); + _session.Clear(); + + Trace.WriteLine("gammaDraft3"); + var gammaDraft3 = _manager.Get(gamma1.Id, VersionOptions.DraftRequired); + Assert.That(gammaDraft3.Version, Is.EqualTo(3)); + Assert.That(gammaDraft3.Record, Is.Not.SameAs(gammaDraft2.Record)); + Trace.WriteLine("flush"); + _session.Flush(); + _session.Clear(); + } + [Test] public void UsingGetManyDraftRequiredShouldBuildNewVersionIfLatestIsAlreadyPublished() { Trace.WriteLine("gamma1");