From 232581664b92bc65ded045ae701e78cc4d9760e4 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Fri, 24 May 2013 08:13:24 -0200 Subject: [PATCH] Moving internal membership provider classes. Adding missing alias to AllowedContentTypes on ContentType. Adding Package export test. --- .../Rdbms/ContentTypeAllowedContentTypeDto.cs | 3 + .../Repositories/ContentTypeBaseRepository.cs | 6 +- src/Umbraco.Core/Services/PackagingService.cs | 65 +++++++++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 2 - .../Services/Importing/PackageImportTests.cs | 23 +++++++ .../Providers/MembersMembershipProvider.cs | 3 +- .../Providers/UsersMembershipProvider.cs | 3 +- src/Umbraco.Web/Umbraco.Web.csproj | 2 + 8 files changed, 101 insertions(+), 6 deletions(-) rename src/{Umbraco.Core/Models/Membership => Umbraco.Web/Security}/Providers/MembersMembershipProvider.cs (95%) rename src/{Umbraco.Core/Models/Membership => Umbraco.Web/Security}/Providers/UsersMembershipProvider.cs (95%) diff --git a/src/Umbraco.Core/Models/Rdbms/ContentTypeAllowedContentTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/ContentTypeAllowedContentTypeDto.cs index 0b66d61150..91904437f0 100644 --- a/src/Umbraco.Core/Models/Rdbms/ContentTypeAllowedContentTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/ContentTypeAllowedContentTypeDto.cs @@ -20,5 +20,8 @@ namespace Umbraco.Core.Models.Rdbms [Column("SortOrder")] [Constraint(Name = "df_cmsContentTypeAllowedContentType_sortOrder", Default = "0")] public int SortOrder { get; set; } + + [ResultColumn] + public ContentTypeDto ContentTypeDto { get; set; } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index fdac85950b..7fa04e6e58 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -320,10 +320,12 @@ namespace Umbraco.Core.Persistence.Repositories var sql = new Sql(); sql.Select("*") .From() + .LeftJoin() + .On(left => left.Id, right => right.NodeId) .Where(x => x.Id == id); - var allowedContentTypeDtos = Database.Fetch(sql); - return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy(() => x.AllowedId), SortOrder = x.SortOrder }).ToList(); + var allowedContentTypeDtos = Database.Fetch(sql); + return allowedContentTypeDtos.Select(x => new ContentTypeSort { Id = new Lazy(() => x.AllowedId), Alias = x.ContentTypeDto.Alias, SortOrder = x.SortOrder }).ToList(); } protected PropertyGroupCollection GetPropertyGroupCollection(int id, DateTime createDate, DateTime updateDate) diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 6912da28ae..b627b72298 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -192,6 +192,71 @@ namespace Umbraco.Core.Services #region ContentTypes + public XElement Export(IContentType contentType) + { + var info = new XElement("Info", + new XElement("Name", contentType.Name), + new XElement("Alias", contentType.Alias), + new XElement("Icon", contentType.Icon), + new XElement("Thumbnail", contentType.Thumbnail), + new XElement("Description", contentType.Description), + new XElement("AllowAtRoot", contentType.AllowedAsRoot.ToString())); + + var masterContentType = contentType.CompositionAliases().FirstOrDefault(); + if(masterContentType != null) + info.Add(new XElement("Master", masterContentType)); + + var allowedTemplates = new XElement("AllowedTemplates"); + foreach (var template in contentType.AllowedTemplates) + { + allowedTemplates.Add(new XElement("Template", template.Alias)); + } + info.Add(allowedTemplates); + if(contentType.DefaultTemplate != null && contentType.DefaultTemplate.Id != 0) + info.Add(new XElement("DefaultTemplate", contentType.DefaultTemplate.Alias)); + else + info.Add(new XElement("DefaultTemplate", "")); + + var structure = new XElement("Structure"); + foreach (var allowedType in contentType.AllowedContentTypes) + { + structure.Add(new XElement("DocumentType", allowedType.Alias)); + } + + var genericProperties = new XElement("GenericProperties"); + foreach (var propertyType in contentType.PropertyTypes) + { + var definition = _dataTypeService.GetDataTypeDefinitionById(propertyType.DataTypeDefinitionId); + var propertyGroup = contentType.PropertyGroups.FirstOrDefault(x => x.Id == propertyType.PropertyGroupId.Value); + var genericProperty = new XElement("GenericProperty", + new XElement("Name", propertyType.Name), + new XElement("Alias", propertyType.Alias), + new XElement("Type", propertyType.DataTypeId.ToString()), + new XElement("Definition", definition.Key), + new XElement("Tab", propertyGroup == null ? "" : propertyGroup.Name), + new XElement("Mandatory", propertyType.Mandatory.ToString()), + new XElement("Validation", propertyType.ValidationRegExp), + new XElement("Description", new XCData(propertyType.Description))); + genericProperties.Add(genericProperty); + } + + var tabs = new XElement("Tabs"); + foreach (var propertyGroup in contentType.PropertyGroups) + { + var tab = new XElement("Tab", + new XElement("Id", propertyGroup.Id.ToString()), + new XElement("Caption", propertyGroup.Name)); + tabs.Add(tab); + } + + var xml = new XElement("DocumentType", + info, + structure, + genericProperties, + tabs); + return xml; + } + /// /// Imports and saves package xml as /// diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index f3f4f72b3b..901d77521d 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -196,8 +196,6 @@ - - diff --git a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs index 24ae92f4d5..6a4ec7b1a7 100644 --- a/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs +++ b/src/Umbraco.Tests/Services/Importing/PackageImportTests.cs @@ -224,6 +224,29 @@ namespace Umbraco.Tests.Services.Importing Assert.That(contentTypes.Count(), Is.EqualTo(1)); } + [Test] + public void PackagingService_Can_Export_Single_DocType() + { + // Arrange + string strXml = ImportResources.SingleDocType; + var docTypeElement = XElement.Parse(strXml); + var packagingService = ServiceContext.PackagingService; + + // Act + var contentTypes = packagingService.ImportContentTypes(docTypeElement); + var contentType = contentTypes.FirstOrDefault(); + var element = packagingService.Export(contentType); + + // Assert + Assert.That(element, Is.Not.Null); + Assert.That(element.Element("Info"), Is.Not.Null); + Assert.That(element.Element("Structure"), Is.Not.Null); + Assert.That(element.Element("GenericProperties"), Is.Not.Null); + Assert.That(element.Element("Tabs"), Is.Not.Null); + //Can't compare this XElement because the templates are not imported (they don't exist) + //Assert.That(XNode.DeepEquals(docTypeElement, element), Is.True); + } + [Test] public void PackagingService_Can_ReImport_Single_DocType() { diff --git a/src/Umbraco.Core/Models/Membership/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs similarity index 95% rename from src/Umbraco.Core/Models/Membership/Providers/MembersMembershipProvider.cs rename to src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs index b3e95da7f7..a19436f682 100644 --- a/src/Umbraco.Core/Models/Membership/Providers/MembersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs @@ -1,7 +1,8 @@ using System.Web.Security; +using Umbraco.Core; using Umbraco.Core.Services; -namespace Umbraco.Core.Models.Membership.Providers +namespace Umbraco.Web.Security.Providers { /// /// Custom Membership Provider for Umbraco Members (User authentication for Umbraco based Websites) diff --git a/src/Umbraco.Core/Models/Membership/Providers/UsersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs similarity index 95% rename from src/Umbraco.Core/Models/Membership/Providers/UsersMembershipProvider.cs rename to src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs index 591c02eecf..b8271c4e7f 100644 --- a/src/Umbraco.Core/Models/Membership/Providers/UsersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs @@ -2,9 +2,10 @@ using System.Security.Cryptography; using System.Text; using System.Web.Security; +using Umbraco.Core; using Umbraco.Core.Services; -namespace Umbraco.Core.Models.Membership.Providers +namespace Umbraco.Web.Security.Providers { /// /// Custom Membership Provider for Umbraco Users (User authentication for Umbraco Backend CMS) diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 9c085ff540..348dae2dfa 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -288,6 +288,8 @@ + +