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 Guid _version;
private readonly int _id;
private readonly DateTime _createDate;
private readonly DateTime _updateDate;
public PropertyFactory(IContentTypeComposition contentType, Guid version, int id)
{
@@ -19,6 +21,15 @@ namespace Umbraco.Core.Persistence.Factories
_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>
public IEnumerable<Property> BuildEntity(IEnumerable<PropertyDataDto> dtos)
@@ -34,6 +45,8 @@ namespace Umbraco.Core.Persistence.Factories
propertyDataDto.VersionId.Value,
propertyDataDto.Id);
property.CreateDate = _createDate;
property.UpdateDate = _updateDate;
property.ResetDirtyProperties();
properties.Add(property);
}

View File

@@ -9,12 +9,21 @@ namespace Umbraco.Core.Persistence.Factories
internal class PropertyGroupFactory : IEntityFactory<IEnumerable<PropertyGroup>, IEnumerable<PropertyTypeGroupDto>>
{
private readonly int _id;
private readonly DateTime _createDate;
private readonly DateTime _updateDate;
public PropertyGroupFactory(int 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>>
public IEnumerable<PropertyGroup> BuildEntity(IEnumerable<PropertyTypeGroupDto> dto)
@@ -58,7 +67,9 @@ namespace Umbraco.Core.Persistence.Factories
Mandatory = typeDto.Mandatory,
SortOrder = typeDto.SortOrder,
ValidationRegExp = typeDto.ValidationRegExp,
PropertyGroupId = new Lazy<int>(() => tempGroupDto.Id)
PropertyGroupId = new Lazy<int>(() => tempGroupDto.Id),
CreateDate = _createDate,
UpdateDate = _updateDate
};
propertyType.ResetDirtyProperties();

View File

@@ -437,13 +437,13 @@ namespace Umbraco.Core.Persistence.Repositories
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();
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();
sql.Select("*")
@@ -454,7 +454,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where<PropertyDataDto>(x => x.VersionId == versionId);
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 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();
}
protected PropertyGroupCollection GetPropertyGroupCollection(int id)
protected PropertyGroupCollection GetPropertyGroupCollection(int id, DateTime createDate, DateTime updateDate)
{
var sql = new Sql();
sql.Select("*")
@@ -326,12 +326,12 @@ namespace Umbraco.Core.Persistence.Repositories
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);
return new PropertyGroupCollection(propertyGroups);
}
protected PropertyTypeCollection GetPropertyTypeCollection(int id)
protected PropertyTypeCollection GetPropertyTypeCollection(int id, DateTime createDate, DateTime updateDate)
{
var sql = new Sql();
sql.Select("*")
@@ -357,7 +357,9 @@ namespace Umbraco.Core.Persistence.Repositories
HelpText = dto.HelpText,
Mandatory = dto.Mandatory,
SortOrder = dto.SortOrder,
ValidationRegExp = dto.ValidationRegExp
ValidationRegExp = dto.ValidationRegExp,
CreateDate = createDate,
UpdateDate = updateDate
}).ToList();
//Reset dirty properties

View File

@@ -51,8 +51,8 @@ namespace Umbraco.Core.Persistence.Repositories
var contentType = factory.BuildEntity(dto);
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id);
((ContentType)contentType).PropertyTypes = GetPropertyTypeCollection(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id, contentType.CreateDate, contentType.UpdateDate);
((ContentType)contentType).PropertyTypes = GetPropertyTypeCollection(id, contentType.CreateDate, contentType.UpdateDate);
var templates = Database.Fetch<DocumentTypeDto>("WHERE contentTypeNodeId = @Id", new { Id = id });
if(templates.Any())

View File

@@ -51,7 +51,7 @@ namespace Umbraco.Core.Persistence.Repositories
var factory = new MediaFactory(mediaType, NodeObjectTypeId, id);
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();
return media;
@@ -157,7 +157,7 @@ namespace Umbraco.Core.Persistence.Repositories
var factory = new MediaFactory(mediaType, NodeObjectTypeId, dto.NodeId);
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();
return media;
@@ -340,7 +340,7 @@ namespace Umbraco.Core.Persistence.Repositories
#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();
sql.Select("*")
@@ -351,7 +351,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Where<PropertyDataDto>(x => x.VersionId == versionId);
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 newProperties = properties.Where(x => x.HasIdentity == false);

View File

@@ -42,8 +42,8 @@ namespace Umbraco.Core.Persistence.Repositories
var contentType = factory.BuildEntity(dto);
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id);
((MediaType)contentType).PropertyTypes = GetPropertyTypeCollection(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id, contentType.CreateDate, contentType.UpdateDate);
((MediaType)contentType).PropertyTypes = GetPropertyTypeCollection(id, contentType.CreateDate, contentType.UpdateDate);
var list = Database.Fetch<ContentType2ContentTypeDto>("WHERE childContentTypeId = @Id", new{ Id = id});
foreach (var contentTypeDto in list)

View File

@@ -230,11 +230,10 @@ namespace Umbraco.Tests.Services.Importing
// Arrange
string strXml = ImportResources.SingleDocType;
var docTypeElement = XElement.Parse(strXml);
var packagingService = ServiceContext.PackagingService;
// Act
var contentTypes = packagingService.ImportContentTypes(docTypeElement);
var contentTypesUpdated = packagingService.ImportContentTypes(docTypeElement);
var contentTypes = ServiceContext.PackagingService.ImportContentTypes(docTypeElement);
var contentTypesUpdated = ServiceContext.PackagingService.ImportContentTypes(docTypeElement);
// Assert
Assert.That(contentTypes.Any(), Is.True);

View File

@@ -72,8 +72,10 @@ namespace umbraco.presentation.umbraco.dialogs
var xd = new XmlDocument();
xd.Load(tempFile.Value);
var userId = base.getUser().Id;
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();
if (contentType != null)
dtNameConfirm.Text = contentType.Name;