diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index 951f30d8f1..3b293621d5 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -223,6 +223,7 @@ namespace Umbraco.Tests.Models Assert.IsNull(content.GetValue("prop", published: true)); // change + contentType.Variations |= ContentVariation.CultureNeutral; propertyType.Variations |= ContentVariation.CultureNeutral; // can set value diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index f613fcc653..723418ace1 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -2569,7 +2569,7 @@ namespace Umbraco.Tests.Services contentService.SaveAndPublish(content); // content has been published, - // it has -- THIS IS WHERE IT BECOMES WEIRD -- FIXME + // the french culture is gone content2 = contentService.GetById(content.Id); @@ -2577,7 +2577,7 @@ namespace Umbraco.Tests.Services Assert.AreEqual("name-fr2", content2.GetName(langFr.Id)); Assert.AreEqual("name-uk2", content2.GetName(langUk.Id)); - Assert.AreEqual("Home US2", content2.PublishName); // fixme why? + Assert.AreEqual("Home US2", content2.PublishName); // fixme why? -- and what about properties? Assert.IsNull(content2.GetPublishName(langFr.Id)); Assert.AreEqual("name-uk", content2.GetPublishName(langUk.Id)); @@ -2589,35 +2589,42 @@ namespace Umbraco.Tests.Services contentService.Unpublish(content); // content has been unpublished, - // ... + // but properties, names, etc. retain their 'published' values so the content + // can be re-published in its exact original state (before being unpublished) + // + // fixme should PublishName, GetPublishName and IsCulturePublished check content.Published? - content2 = contentService.GetById(content.Id); + content2 = contentService.GetById(content.Id); + + Assert.IsFalse(content2.Published); Assert.AreEqual("Home US2", content2.Name); Assert.AreEqual("name-fr2", content2.GetName(langFr.Id)); Assert.AreEqual("name-uk2", content2.GetName(langUk.Id)); - Assert.IsNotNull(content2.PublishName); // fixme not null?! why? + Assert.AreEqual("Home US2", content2.PublishName); // not null, see note above Assert.IsNull(content2.GetPublishName(langFr.Id)); - Assert.IsNotNull(content2.GetPublishName(langUk.Id)); // fixme not null?! why? because the 'published' values are not going away! + Assert.AreEqual("name-uk", content2.GetPublishName(langUk.Id)); // not null, see note above Assert.IsFalse(content.IsCulturePublished(langFr.Id)); - Assert.IsTrue(content.IsCulturePublished(langUk.Id)); // fixme ?? + Assert.IsTrue(content.IsCulturePublished(langUk.Id)); // still true, see note above // act contentService.SaveAndPublish(content); // content has been re-published, - // ... + // everything is back to what it was before being unpublished content2 = contentService.GetById(content.Id); + Assert.IsTrue(content2.Published); + Assert.AreEqual("Home US2", content2.Name); Assert.AreEqual("name-fr2", content2.GetName(langFr.Id)); Assert.AreEqual("name-uk2", content2.GetName(langUk.Id)); - Assert.AreEqual("Home US2", content2.PublishName); // fixme US2? see above + Assert.AreEqual("Home US2", content2.PublishName); Assert.IsNull(content2.GetPublishName(langFr.Id)); Assert.AreEqual("name-uk", content2.GetPublishName(langUk.Id)); diff --git a/src/Umbraco.Web/Models/Mapping/ContentUrlResolver.cs b/src/Umbraco.Web/Models/Mapping/ContentUrlResolver.cs index 24b82b4dd3..909ca83985 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentUrlResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentUrlResolver.cs @@ -10,7 +10,7 @@ namespace Umbraco.Web.Models.Mapping { public string[] Resolve(IContent source, ContentItemDisplay destination, string[] destMember, ResolutionContext context) { - var umbracoContext = context.GetUmbracoContext(); + var umbracoContext = context.GetUmbracoContext(throwIfMissing: false); var urls = umbracoContext == null ? new[] {"Cannot generate urls without a current Umbraco Context"} @@ -19,4 +19,4 @@ namespace Umbraco.Web.Models.Mapping return urls; } } -} \ No newline at end of file +} diff --git a/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs index 540f1d509d..61419281c4 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs @@ -37,6 +37,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Notifications, opt => opt.Ignore()) .ForMember(dest => dest.Errors, opt => opt.Ignore()) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) .ForMember(dest => dest.IsContainer, opt => opt.Ignore()) @@ -58,6 +59,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Trashed, opt => opt.MapFrom(src => src.Trashed)) .ForMember(dest => dest.ContentTypeAlias, opt => opt.MapFrom(src => src.ContentType.Alias)) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) .ForMember(dest => dest.AdditionalData, opt => opt.Ignore()); @@ -67,6 +69,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Udi, opt => opt.MapFrom(src => Udi.Create(Constants.UdiEntityType.Media, src.Key))) .ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => mediaOwnerResolver.Resolve(src))) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Icon, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) diff --git a/src/Umbraco.Web/Models/Mapping/MemberMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/MemberMapperProfile.cs index eac93657f4..a8fd2f3603 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberMapperProfile.cs @@ -45,6 +45,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.CreatorId, opt => opt.Ignore()) .ForMember(dest => dest.Level, opt => opt.Ignore()) .ForMember(dest => dest.Name, opt => opt.Ignore()) + .ForMember(dest => dest.Names, opt => opt.Ignore()) .ForMember(dest => dest.ParentId, opt => opt.Ignore()) .ForMember(dest => dest.Path, opt => opt.Ignore()) .ForMember(dest => dest.SortOrder, opt => opt.Ignore()) @@ -70,6 +71,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Notifications, opt => opt.Ignore()) .ForMember(dest => dest.Errors, opt => opt.Ignore()) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) .ForMember(dest => dest.IsChildOfListView, opt => opt.Ignore()) @@ -87,6 +89,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Username)) .ForMember(dest => dest.Trashed, opt => opt.Ignore()) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) .ForMember(dto => dto.Properties, expression => expression.ResolveUsing(memberBasicPropertiesResolver)); @@ -110,6 +113,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.SortOrder, opt => opt.Ignore()) .ForMember(dest => dest.AdditionalData, opt => opt.Ignore()) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Trashed, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) @@ -120,6 +124,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Udi, opt => opt.MapFrom(content => Udi.Create(Constants.UdiEntityType.Member, content.Key))) .ForMember(dest => dest.Owner, opt => opt.ResolveUsing(src => memberOwnerResolver.Resolve(src))) .ForMember(dest => dest.Published, opt => opt.Ignore()) + .ForMember(dest => dest.Edited, opt => opt.Ignore()) .ForMember(dest => dest.Updater, opt => opt.Ignore()) .ForMember(dest => dest.Icon, opt => opt.Ignore()) .ForMember(dest => dest.Alias, opt => opt.Ignore()) diff --git a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs index 9bef3747de..81b2aed595 100644 --- a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs @@ -260,7 +260,7 @@ namespace Umbraco.Web.Models.Mapping public virtual IEnumerable> Resolve(TSource source, TDestination destination, IEnumerable> destMember, ResolutionContext context) { - var umbracoContext = context.GetUmbracoContext(); + var umbracoContext = context.GetUmbracoContext(throwIfMissing: false); // fixme var tabs = new List>(); // add the tabs, for properties that belong to a tab