* Rename Umbraco.Core namespace to Umbraco.Cms.Core * Move extension methods in core project to Umbraco.Extensions * Move extension methods in core project to Umbraco.Extensions * Rename Umbraco.Examine namespace to Umbraco.Cms.Examine * Move examine extensions to Umbraco.Extensions namespace * Reflect changed namespaces in Builder and fix unit tests * Adjust namespace in Umbraco.ModelsBuilder.Embedded * Adjust namespace in Umbraco.Persistence.SqlCe * Adjust namespace in Umbraco.PublishedCache.NuCache * Align namespaces in Umbraco.Web.BackOffice * Align namespaces in Umbraco.Web.Common * Ensure that SqlCeSupport is still enabled after changing the namespace * Align namespaces in Umbraco.Web.Website * Align namespaces in Umbraco.Web.UI.NetCore * Align namespaces in Umbraco.Tests.Common * Align namespaces in Umbraco.Tests.UnitTests * Align namespaces in Umbraco.Tests.Integration * Fix errors caused by changed namespaces * Fix integration tests * Undo the Umbraco.Examine.Lucene namespace change This breaks integration tests on linux, since the namespace wont exists there because it's only used on windows. * Fix merge * Fix Merge
77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
using System;
|
|
using Umbraco.Cms.Core.Mapping;
|
|
using Umbraco.Cms.Core.Models.ContentEditing;
|
|
using Umbraco.Extensions;
|
|
|
|
namespace Umbraco.Cms.Core.Models.Mapping
|
|
{
|
|
/// <summary>
|
|
/// Returns the <see cref="ContentSavedState?"/> for an <see cref="IContent"/> item
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
public class ContentBasicSavedStateMapper<T>
|
|
where T : ContentPropertyBasic
|
|
{
|
|
private readonly ContentSavedStateMapper<T> _inner = new ContentSavedStateMapper<T>();
|
|
|
|
public ContentSavedState? Map(IContent source, MapperContext context)
|
|
{
|
|
return _inner.Map(source, context);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the <see cref="ContentSavedState"/> for an <see cref="IContent"/> item
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
public class ContentSavedStateMapper<T>
|
|
where T : ContentPropertyBasic
|
|
{
|
|
public ContentSavedState Map(IContent source, MapperContext context)
|
|
{
|
|
PublishedState publishedState;
|
|
bool isEdited;
|
|
bool isCreated;
|
|
|
|
if (source.ContentType.VariesByCulture())
|
|
{
|
|
//Get the culture from the context which will be set during the mapping operation for each variant
|
|
var culture = context.GetCulture();
|
|
|
|
//a culture needs to be in the context for a variant content item
|
|
if (culture == null)
|
|
throw new InvalidOperationException($"No culture found in mapping operation when one is required for a culture variant");
|
|
|
|
publishedState = source.PublishedState == PublishedState.Unpublished //if the entire document is unpublished, then flag every variant as unpublished
|
|
? PublishedState.Unpublished
|
|
: source.IsCulturePublished(culture)
|
|
? PublishedState.Published
|
|
: PublishedState.Unpublished;
|
|
|
|
isEdited = source.IsCultureEdited(culture);
|
|
isCreated = source.Id > 0 && source.IsCultureAvailable(culture);
|
|
}
|
|
else
|
|
{
|
|
publishedState = source.PublishedState == PublishedState.Unpublished
|
|
? PublishedState.Unpublished
|
|
: PublishedState.Published;
|
|
|
|
isEdited = source.Edited;
|
|
isCreated = source.Id > 0;
|
|
}
|
|
|
|
if (!isCreated)
|
|
return ContentSavedState.NotCreated;
|
|
|
|
if (publishedState == PublishedState.Unpublished)
|
|
return ContentSavedState.Draft;
|
|
|
|
if (publishedState == PublishedState.Published)
|
|
return isEdited ? ContentSavedState.PublishedPendingChanges : ContentSavedState.Published;
|
|
|
|
throw new NotSupportedException($"PublishedState {publishedState} is not supported.");
|
|
}
|
|
}
|
|
}
|