Adds MediaTypeRepository implementation U4-958 and improving the code structure in the content type repos a bit.

This commit is contained in:
Morten@Thinkpad-X220
2012-10-09 10:49:43 -02:00
parent 87ff6d03e8
commit 0d9bb02a9c
2 changed files with 94 additions and 27 deletions

View File

@@ -39,23 +39,12 @@ namespace Umbraco.Core.Persistence.Repositories
return null;
//TODO Get ContentType composition according to new table
//TODO Add AllowedContentTypes
var propertySql = new Sql();
propertySql.Select("*");
propertySql.From("cmsTab");
propertySql.RightJoin("cmsPropertyType ON [cmsTab].[id] = [cmsPropertyType].[tabId]");
propertySql.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]");
propertySql.Where("[cmsPropertyType].[contentTypeId] = @Id", new { Id = id });
var tabDtos = Database.Fetch<TabDto, PropertyTypeDto, DataTypeDto, TabDto>(new TabPropertyTypeRelator().Map, propertySql);
var factory = new ContentTypeFactory(NodeObjectTypeId);
var contentType = factory.BuildEntity(documentTypeDto);
var propertyFactory = new PropertyGroupFactory(id);
var propertyGroups = propertyFactory.BuildEntity(tabDtos);
contentType.PropertyGroups = new PropertyGroupCollection(propertyGroups);
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id);
((ContentType)contentType).ResetDirtyProperties();
return contentType;
@@ -182,9 +171,15 @@ namespace Umbraco.Core.Persistence.Repositories
Database.Insert(contentTypeDto);
//TODO Insert new DocumentType entries - NOTE only seems relevant as long as Templates resides in the DB?
//TODO Insert allowed Templates and DocumentTypes
//TODO Insert allowed Templates
//TODO Insert ContentType composition in new table
//Insert collection of allowed content types
foreach (var allowedContentType in entity.AllowedContentTypes)
{
Database.Insert(new ContentTypeAllowedContentTypeDto {Id = entity.Id, AllowedId = allowedContentType});
}
var propertyFactory = new PropertyGroupFactory(nodeDto.NodeId);
//Insert Tabs
@@ -228,6 +223,19 @@ namespace Umbraco.Core.Persistence.Repositories
//Look up DocumentType entries for updating - this could possibly be a "remove all, insert all"-approach
//TODO Update new DocumentType entries - NOTE only seems relevant as long as Templates resides in the DB?
//TODO Update allowed Templates
//TODO Update ContentType composition in new table
//Delete the allowed content type entries before adding the updated collection
Database.Delete<ContentTypeAllowedContentTypeDto>("WHERE Id = @Id", new {Id = entity.Id});
//Insert collection of allowed content types
foreach (var allowedContentType in entity.AllowedContentTypes)
{
Database.Insert(new ContentTypeAllowedContentTypeDto { Id = entity.Id, AllowedId = allowedContentType });
}
//Check Dirty properties for Tabs/Groups and PropertyTypes - insert and delete accordingly
if (((ICanBeDirty)entity).IsPropertyDirty("PropertyGroups") || entity.PropertyGroups.Any(x => x.IsDirty()))
{
@@ -277,5 +285,32 @@ namespace Umbraco.Core.Persistence.Repositories
}
#endregion
private IEnumerable<int> GetAllowedContentTypeIds(int id)
{
var allowedContentTypesSql = new Sql();
allowedContentTypesSql.Select("*");
allowedContentTypesSql.From("cmsContentTypeAllowedContentType");
allowedContentTypesSql.Where("[cmsContentTypeAllowedContentType].[Id] = @Id", new { Id = id });
var allowedContentTypeDtos = Database.Fetch<ContentTypeAllowedContentTypeDto>(allowedContentTypesSql);
return allowedContentTypeDtos.Select(x => x.AllowedId).ToList();
}
private PropertyGroupCollection GetPropertyGroupCollection(int id)
{
var propertySql = new Sql();
propertySql.Select("*");
propertySql.From("cmsTab");
propertySql.RightJoin("cmsPropertyType ON [cmsTab].[id] = [cmsPropertyType].[tabId]");
propertySql.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]");
propertySql.Where("[cmsPropertyType].[contentTypeId] = @Id", new { Id = id });
var tabDtos = Database.Fetch<TabDto, PropertyTypeDto, DataTypeDto, TabDto>(new TabPropertyTypeRelator().Map, propertySql);
var propertyFactory = new PropertyGroupFactory(id);
var propertyGroups = propertyFactory.BuildEntity(tabDtos);
return new PropertyGroupCollection(propertyGroups);
}
}
}

View File

@@ -38,21 +38,11 @@ namespace Umbraco.Core.Persistence.Repositories
if (dto == null)
return null;
var propertySql = new Sql();
propertySql.Select("*");
propertySql.From("cmsTab");
propertySql.RightJoin("cmsPropertyType ON [cmsTab].[id] = [cmsPropertyType].[tabId]");
propertySql.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]");
propertySql.Where("[cmsPropertyType].[contentTypeId] = @Id", new { Id = id });
var tabDtos = Database.Fetch<TabDto, PropertyTypeDto, DataTypeDto, TabDto>(new TabPropertyTypeRelator().Map, propertySql);
var factory = new MediaTypeFactory(NodeObjectTypeId);
var contentType = factory.BuildEntity(dto);
var propertyFactory = new PropertyGroupFactory(id);
var propertyGroups = propertyFactory.BuildEntity(tabDtos);
contentType.PropertyGroups = new PropertyGroupCollection(propertyGroups);
contentType.AllowedContentTypes = GetAllowedContentTypeIds(id);
contentType.PropertyGroups = GetPropertyGroupCollection(id);
((MediaType)contentType).ResetDirtyProperties();
return contentType;
@@ -170,6 +160,12 @@ namespace Umbraco.Core.Persistence.Repositories
//Insert new ContentType entry
Database.Insert(dto);
//Insert collection of allowed content types
foreach (var allowedContentType in entity.AllowedContentTypes)
{
Database.Insert(new ContentTypeAllowedContentTypeDto { Id = entity.Id, AllowedId = allowedContentType });
}
}
protected override void PersistUpdatedItem(IMediaType entity)
@@ -188,6 +184,15 @@ namespace Umbraco.Core.Persistence.Repositories
dto.PrimaryKey = dtoPk.PrimaryKey;
Database.Update(dto);
//Delete the allowed content type entries before adding the updated collection
Database.Delete<ContentTypeAllowedContentTypeDto>("WHERE Id = @Id", new { Id = entity.Id });
//Insert collection of allowed content types
foreach (var allowedContentType in entity.AllowedContentTypes)
{
Database.Insert(new ContentTypeAllowedContentTypeDto { Id = entity.Id, AllowedId = allowedContentType });
}
//Check Dirty properties for Tabs/Groups and PropertyTypes - insert and delete accordingly
if (((ICanBeDirty)entity).IsPropertyDirty("PropertyGroups") || entity.PropertyGroups.Any(x => x.IsDirty()))
{
@@ -237,5 +242,32 @@ namespace Umbraco.Core.Persistence.Repositories
}
#endregion
private IEnumerable<int> GetAllowedContentTypeIds(int id)
{
var allowedContentTypesSql = new Sql();
allowedContentTypesSql.Select("*");
allowedContentTypesSql.From("cmsContentTypeAllowedContentType");
allowedContentTypesSql.Where("[cmsContentTypeAllowedContentType].[Id] = @Id", new { Id = id });
var allowedContentTypeDtos = Database.Fetch<ContentTypeAllowedContentTypeDto>(allowedContentTypesSql);
return allowedContentTypeDtos.Select(x => x.AllowedId).ToList();
}
private PropertyGroupCollection GetPropertyGroupCollection(int id)
{
var propertySql = new Sql();
propertySql.Select("*");
propertySql.From("cmsTab");
propertySql.RightJoin("cmsPropertyType ON [cmsTab].[id] = [cmsPropertyType].[tabId]");
propertySql.InnerJoin("cmsDataType ON [cmsPropertyType].[dataTypeId] = [cmsDataType].[nodeId]");
propertySql.Where("[cmsPropertyType].[contentTypeId] = @Id", new { Id = id });
var tabDtos = Database.Fetch<TabDto, PropertyTypeDto, DataTypeDto, TabDto>(new TabPropertyTypeRelator().Map, propertySql);
var propertyFactory = new PropertyGroupFactory(id);
var propertyGroups = propertyFactory.BuildEntity(tabDtos);
return new PropertyGroupCollection(propertyGroups);
}
}
}