From afc2fd94202b4ea4748d323be8a45e607f0ca58d Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Sat, 20 Apr 2013 12:23:14 -0200 Subject: [PATCH] Ensures that CreateDate and UpdateDate is set on both PropertyTypes and Properties for Content and Media. Fixes #U4-2028 --- .../Persistence/Factories/PropertyFactory.cs | 13 +++++++++++++ .../Persistence/Factories/PropertyGroupFactory.cs | 13 ++++++++++++- .../Persistence/Repositories/ContentRepository.cs | 6 +++--- .../Repositories/ContentTypeBaseRepository.cs | 10 ++++++---- .../Repositories/ContentTypeRepository.cs | 4 ++-- .../Persistence/Repositories/MediaRepository.cs | 8 ++++---- .../Persistence/Repositories/MediaTypeRepository.cs | 4 ++-- .../Services/Importing/PackageImportTests.cs | 5 ++--- .../umbraco/dialogs/importDocumenttype.aspx.cs | 4 +++- 9 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs index 623e770525..8b1a88126a 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs @@ -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 public IEnumerable BuildEntity(IEnumerable 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); } diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs index 3139fe5fa4..17dc7a69d9 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyGroupFactory.cs @@ -9,12 +9,21 @@ namespace Umbraco.Core.Persistence.Factories internal class PropertyGroupFactory : IEntityFactory, IEnumerable> { 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> public IEnumerable BuildEntity(IEnumerable dto) @@ -58,7 +67,9 @@ namespace Umbraco.Core.Persistence.Factories Mandatory = typeDto.Mandatory, SortOrder = typeDto.SortOrder, ValidationRegExp = typeDto.ValidationRegExp, - PropertyGroupId = new Lazy(() => tempGroupDto.Id) + PropertyGroupId = new Lazy(() => tempGroupDto.Id), + CreateDate = _createDate, + UpdateDate = _updateDate }; propertyType.ResetDirtyProperties(); diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index 3eb7d0d3a3..8f2f7d6656 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -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(x => x.VersionId == versionId); var propertyDataDtos = Database.Fetch(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); diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index 7aad681549..44254e803b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -312,7 +312,7 @@ namespace Umbraco.Core.Persistence.Repositories return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy(() => 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(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 diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index c35105d13f..340d89bb38 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -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("WHERE contentTypeNodeId = @Id", new { Id = id }); if(templates.Any()) diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 24e6f409ca..ae689325cf 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -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(x => x.VersionId == versionId); var propertyDataDtos = Database.Fetch(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); diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs index 7ea930a90e..bfb9fe09f7 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs @@ -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("WHERE childContentTypeId = @Id", new{ Id = id}); foreach (var contentTypeDto in list) diff --git a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs index f791894f92..69f6811846 100644 --- a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs +++ b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs @@ -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); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs index aec5421174..23005d62d2 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/importDocumenttype.aspx.cs @@ -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;