Ensures that CreateDate and UpdateDate is set on both PropertyTypes and Properties for Content and Media.
Fixes #U4-2028
This commit is contained in:
@@ -11,6 +11,8 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
private readonly IContentTypeComposition _contentType;
|
private readonly IContentTypeComposition _contentType;
|
||||||
private readonly Guid _version;
|
private readonly Guid _version;
|
||||||
private readonly int _id;
|
private readonly int _id;
|
||||||
|
private readonly DateTime _createDate;
|
||||||
|
private readonly DateTime _updateDate;
|
||||||
|
|
||||||
public PropertyFactory(IContentTypeComposition contentType, Guid version, int id)
|
public PropertyFactory(IContentTypeComposition contentType, Guid version, int id)
|
||||||
{
|
{
|
||||||
@@ -19,6 +21,15 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
_id = id;
|
_id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PropertyFactory(IContentTypeComposition contentType, Guid version, int id, DateTime createDate, DateTime updateDate)
|
||||||
|
{
|
||||||
|
_contentType = contentType;
|
||||||
|
_version = version;
|
||||||
|
_id = id;
|
||||||
|
_createDate = createDate;
|
||||||
|
_updateDate = updateDate;
|
||||||
|
}
|
||||||
|
|
||||||
#region Implementation of IEntityFactory<IContent,PropertyDataDto>
|
#region Implementation of IEntityFactory<IContent,PropertyDataDto>
|
||||||
|
|
||||||
public IEnumerable<Property> BuildEntity(IEnumerable<PropertyDataDto> dtos)
|
public IEnumerable<Property> BuildEntity(IEnumerable<PropertyDataDto> dtos)
|
||||||
@@ -34,6 +45,8 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
propertyDataDto.VersionId.Value,
|
propertyDataDto.VersionId.Value,
|
||||||
propertyDataDto.Id);
|
propertyDataDto.Id);
|
||||||
|
|
||||||
|
property.CreateDate = _createDate;
|
||||||
|
property.UpdateDate = _updateDate;
|
||||||
property.ResetDirtyProperties();
|
property.ResetDirtyProperties();
|
||||||
properties.Add(property);
|
properties.Add(property);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,21 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
internal class PropertyGroupFactory : IEntityFactory<IEnumerable<PropertyGroup>, IEnumerable<PropertyTypeGroupDto>>
|
internal class PropertyGroupFactory : IEntityFactory<IEnumerable<PropertyGroup>, IEnumerable<PropertyTypeGroupDto>>
|
||||||
{
|
{
|
||||||
private readonly int _id;
|
private readonly int _id;
|
||||||
|
private readonly DateTime _createDate;
|
||||||
|
private readonly DateTime _updateDate;
|
||||||
|
|
||||||
public PropertyGroupFactory(int id)
|
public PropertyGroupFactory(int id)
|
||||||
{
|
{
|
||||||
_id = id;
|
_id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PropertyGroupFactory(int id, DateTime createDate, DateTime updateDate)
|
||||||
|
{
|
||||||
|
_id = id;
|
||||||
|
_createDate = createDate;
|
||||||
|
_updateDate = updateDate;
|
||||||
|
}
|
||||||
|
|
||||||
#region Implementation of IEntityFactory<IEnumerable<PropertyGroup>,IEnumerable<TabDto>>
|
#region Implementation of IEntityFactory<IEnumerable<PropertyGroup>,IEnumerable<TabDto>>
|
||||||
|
|
||||||
public IEnumerable<PropertyGroup> BuildEntity(IEnumerable<PropertyTypeGroupDto> dto)
|
public IEnumerable<PropertyGroup> BuildEntity(IEnumerable<PropertyTypeGroupDto> dto)
|
||||||
@@ -58,7 +67,9 @@ namespace Umbraco.Core.Persistence.Factories
|
|||||||
Mandatory = typeDto.Mandatory,
|
Mandatory = typeDto.Mandatory,
|
||||||
SortOrder = typeDto.SortOrder,
|
SortOrder = typeDto.SortOrder,
|
||||||
ValidationRegExp = typeDto.ValidationRegExp,
|
ValidationRegExp = typeDto.ValidationRegExp,
|
||||||
PropertyGroupId = new Lazy<int>(() => tempGroupDto.Id)
|
PropertyGroupId = new Lazy<int>(() => tempGroupDto.Id),
|
||||||
|
CreateDate = _createDate,
|
||||||
|
UpdateDate = _updateDate
|
||||||
};
|
};
|
||||||
|
|
||||||
propertyType.ResetDirtyProperties();
|
propertyType.ResetDirtyProperties();
|
||||||
|
|||||||
@@ -437,13 +437,13 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
content.Template = _templateRepository.Get(dto.TemplateId.Value);
|
content.Template = _templateRepository.Get(dto.TemplateId.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
content.Properties = GetPropertyCollection(dto.NodeId, versionId, contentType);
|
content.Properties = GetPropertyCollection(dto.NodeId, versionId, contentType, content.CreateDate, content.UpdateDate);
|
||||||
|
|
||||||
((ICanBeDirty)content).ResetDirtyProperties();
|
((ICanBeDirty)content).ResetDirtyProperties();
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IContentType contentType)
|
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IContentType contentType, DateTime createDate, DateTime updateDate)
|
||||||
{
|
{
|
||||||
var sql = new Sql();
|
var sql = new Sql();
|
||||||
sql.Select("*")
|
sql.Select("*")
|
||||||
@@ -454,7 +454,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
.Where<PropertyDataDto>(x => x.VersionId == versionId);
|
.Where<PropertyDataDto>(x => x.VersionId == versionId);
|
||||||
|
|
||||||
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(sql);
|
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(sql);
|
||||||
var propertyFactory = new PropertyFactory(contentType, versionId, id);
|
var propertyFactory = new PropertyFactory(contentType, versionId, id, createDate, updateDate);
|
||||||
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
||||||
|
|
||||||
var newProperties = properties.Where(x => x.HasIdentity == false);
|
var newProperties = properties.Where(x => x.HasIdentity == false);
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy<int>(() => x.AllowedId), SortOrder = x.SortOrder }).ToList();
|
return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy<int>(() => x.AllowedId), SortOrder = x.SortOrder }).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PropertyGroupCollection GetPropertyGroupCollection(int id)
|
protected PropertyGroupCollection GetPropertyGroupCollection(int id, DateTime createDate, DateTime updateDate)
|
||||||
{
|
{
|
||||||
var sql = new Sql();
|
var sql = new Sql();
|
||||||
sql.Select("*")
|
sql.Select("*")
|
||||||
@@ -326,12 +326,12 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
|
|
||||||
var dtos = Database.Fetch<PropertyTypeGroupDto, PropertyTypeDto, DataTypeDto, PropertyTypeGroupDto>(new GroupPropertyTypeRelator().Map, sql);
|
var dtos = Database.Fetch<PropertyTypeGroupDto, PropertyTypeDto, DataTypeDto, PropertyTypeGroupDto>(new GroupPropertyTypeRelator().Map, sql);
|
||||||
|
|
||||||
var propertyGroupFactory = new PropertyGroupFactory(id);
|
var propertyGroupFactory = new PropertyGroupFactory(id, createDate, updateDate);
|
||||||
var propertyGroups = propertyGroupFactory.BuildEntity(dtos);
|
var propertyGroups = propertyGroupFactory.BuildEntity(dtos);
|
||||||
return new PropertyGroupCollection(propertyGroups);
|
return new PropertyGroupCollection(propertyGroups);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PropertyTypeCollection GetPropertyTypeCollection(int id)
|
protected PropertyTypeCollection GetPropertyTypeCollection(int id, DateTime createDate, DateTime updateDate)
|
||||||
{
|
{
|
||||||
var sql = new Sql();
|
var sql = new Sql();
|
||||||
sql.Select("*")
|
sql.Select("*")
|
||||||
@@ -357,7 +357,9 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
HelpText = dto.HelpText,
|
HelpText = dto.HelpText,
|
||||||
Mandatory = dto.Mandatory,
|
Mandatory = dto.Mandatory,
|
||||||
SortOrder = dto.SortOrder,
|
SortOrder = dto.SortOrder,
|
||||||
ValidationRegExp = dto.ValidationRegExp
|
ValidationRegExp = dto.ValidationRegExp,
|
||||||
|
CreateDate = createDate,
|
||||||
|
UpdateDate = updateDate
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
//Reset dirty properties
|
//Reset dirty properties
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
var contentType = factory.BuildEntity(dto);
|
var contentType = factory.BuildEntity(dto);
|
||||||
|
|
||||||
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
|
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
|
||||||
contentType.PropertyGroups = GetPropertyGroupCollection(id);
|
contentType.PropertyGroups = GetPropertyGroupCollection(id, contentType.CreateDate, contentType.UpdateDate);
|
||||||
((ContentType)contentType).PropertyTypes = GetPropertyTypeCollection(id);
|
((ContentType)contentType).PropertyTypes = GetPropertyTypeCollection(id, contentType.CreateDate, contentType.UpdateDate);
|
||||||
|
|
||||||
var templates = Database.Fetch<DocumentTypeDto>("WHERE contentTypeNodeId = @Id", new { Id = id });
|
var templates = Database.Fetch<DocumentTypeDto>("WHERE contentTypeNodeId = @Id", new { Id = id });
|
||||||
if(templates.Any())
|
if(templates.Any())
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
var factory = new MediaFactory(mediaType, NodeObjectTypeId, id);
|
var factory = new MediaFactory(mediaType, NodeObjectTypeId, id);
|
||||||
var media = factory.BuildEntity(dto);
|
var media = factory.BuildEntity(dto);
|
||||||
|
|
||||||
media.Properties = GetPropertyCollection(id, dto.VersionId, mediaType);
|
media.Properties = GetPropertyCollection(id, dto.VersionId, mediaType, media.CreateDate, media.UpdateDate);
|
||||||
|
|
||||||
((ICanBeDirty)media).ResetDirtyProperties();
|
((ICanBeDirty)media).ResetDirtyProperties();
|
||||||
return media;
|
return media;
|
||||||
@@ -157,7 +157,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
var factory = new MediaFactory(mediaType, NodeObjectTypeId, dto.NodeId);
|
var factory = new MediaFactory(mediaType, NodeObjectTypeId, dto.NodeId);
|
||||||
var media = factory.BuildEntity(dto);
|
var media = factory.BuildEntity(dto);
|
||||||
|
|
||||||
media.Properties = GetPropertyCollection(dto.NodeId, dto.VersionId, mediaType);
|
media.Properties = GetPropertyCollection(dto.NodeId, dto.VersionId, mediaType, media.CreateDate, media.UpdateDate);
|
||||||
|
|
||||||
((ICanBeDirty)media).ResetDirtyProperties();
|
((ICanBeDirty)media).ResetDirtyProperties();
|
||||||
return media;
|
return media;
|
||||||
@@ -340,7 +340,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IMediaType contentType)
|
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IMediaType contentType, DateTime createDate, DateTime updateDate)
|
||||||
{
|
{
|
||||||
var sql = new Sql();
|
var sql = new Sql();
|
||||||
sql.Select("*")
|
sql.Select("*")
|
||||||
@@ -351,7 +351,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
.Where<PropertyDataDto>(x => x.VersionId == versionId);
|
.Where<PropertyDataDto>(x => x.VersionId == versionId);
|
||||||
|
|
||||||
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(sql);
|
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(sql);
|
||||||
var propertyFactory = new PropertyFactory(contentType, versionId, id);
|
var propertyFactory = new PropertyFactory(contentType, versionId, id, createDate, updateDate);
|
||||||
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
||||||
|
|
||||||
var newProperties = properties.Where(x => x.HasIdentity == false);
|
var newProperties = properties.Where(x => x.HasIdentity == false);
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ namespace Umbraco.Core.Persistence.Repositories
|
|||||||
var contentType = factory.BuildEntity(dto);
|
var contentType = factory.BuildEntity(dto);
|
||||||
|
|
||||||
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
|
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
|
||||||
contentType.PropertyGroups = GetPropertyGroupCollection(id);
|
contentType.PropertyGroups = GetPropertyGroupCollection(id, contentType.CreateDate, contentType.UpdateDate);
|
||||||
((MediaType)contentType).PropertyTypes = GetPropertyTypeCollection(id);
|
((MediaType)contentType).PropertyTypes = GetPropertyTypeCollection(id, contentType.CreateDate, contentType.UpdateDate);
|
||||||
|
|
||||||
var list = Database.Fetch<ContentType2ContentTypeDto>("WHERE childContentTypeId = @Id", new{ Id = id});
|
var list = Database.Fetch<ContentType2ContentTypeDto>("WHERE childContentTypeId = @Id", new{ Id = id});
|
||||||
foreach (var contentTypeDto in list)
|
foreach (var contentTypeDto in list)
|
||||||
|
|||||||
@@ -230,11 +230,10 @@ namespace Umbraco.Tests.Services.Importing
|
|||||||
// Arrange
|
// Arrange
|
||||||
string strXml = ImportResources.SingleDocType;
|
string strXml = ImportResources.SingleDocType;
|
||||||
var docTypeElement = XElement.Parse(strXml);
|
var docTypeElement = XElement.Parse(strXml);
|
||||||
var packagingService = ServiceContext.PackagingService;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var contentTypes = packagingService.ImportContentTypes(docTypeElement);
|
var contentTypes = ServiceContext.PackagingService.ImportContentTypes(docTypeElement);
|
||||||
var contentTypesUpdated = packagingService.ImportContentTypes(docTypeElement);
|
var contentTypesUpdated = ServiceContext.PackagingService.ImportContentTypes(docTypeElement);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.That(contentTypes.Any(), Is.True);
|
Assert.That(contentTypes.Any(), Is.True);
|
||||||
|
|||||||
@@ -72,8 +72,10 @@ namespace umbraco.presentation.umbraco.dialogs
|
|||||||
var xd = new XmlDocument();
|
var xd = new XmlDocument();
|
||||||
xd.Load(tempFile.Value);
|
xd.Load(tempFile.Value);
|
||||||
|
|
||||||
|
var userId = base.getUser().Id;
|
||||||
|
|
||||||
var element = XElement.Parse(xd.InnerXml);
|
var element = XElement.Parse(xd.InnerXml);
|
||||||
var importContentTypes = ApplicationContext.Current.Services.PackagingService.ImportContentTypes(element);
|
var importContentTypes = ApplicationContext.Current.Services.PackagingService.ImportContentTypes(element, userId);
|
||||||
var contentType = importContentTypes.FirstOrDefault();
|
var contentType = importContentTypes.FirstOrDefault();
|
||||||
if (contentType != null)
|
if (contentType != null)
|
||||||
dtNameConfirm.Text = contentType.Name;
|
dtNameConfirm.Text = contentType.Name;
|
||||||
|
|||||||
Reference in New Issue
Block a user