Ensures that CreateDate and UpdateDate is set on both PropertyTypes and Properties for Content and Media.

Fixes #U4-2028
This commit is contained in:
Morten Christensen
2013-04-20 12:23:14 -02:00
parent ff6715d42a
commit afc2fd9420
9 changed files with 47 additions and 20 deletions

View File

@@ -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);
} }

View File

@@ -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();

View File

@@ -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);

View File

@@ -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

View File

@@ -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())

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);

View File

@@ -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;